I wrote this recently:
http://package.elm-lang.org/packages/prozacchiwawa/elm-json-codec/1.0.0/JsonCodec
which at least for normally sized objects will fail to compile if you're
missing a field in an object. It isn't perfect but one advantage is that
you build encoder and decoder pairs together.
On Friday, April 7, 2017 at 7:44:42 AM UTC-7, Daniel Bachler wrote:
>
> Ian's solution is quite nice. Another way to go is that if you also have a
> json decoder to have an elm-test case that ensures that accountToJson >>
> jsonToAccount is an identity operation. For the decoder you would already
> get a type error and probably remember to add the new field in the encoder
> as well, but if you forget it the tests would have your back.
>
> On Friday, April 7, 2017 at 2:48:25 PM UTC+2, Andres Riofrio wrote:
>>
>> For example, I have the following code:
>>
>> type alias Account =
>> { id : Int
>> , name : String }
>>
>> -- ... in another module ...
>>
>> accountToJson : Account -> Json.Encode.Value
>> accountToJson act = Json.Encode.object
>> [ ("id", Json.Encode.int act.id)
>> , ("name", Json.Encode.string act.name)
>> ]
>>
>> If I add a field to Account, I'd like the compiler to make sure it won't
>> be skipped in the output JSON. The way I have written the encoder, the
>> compiler will happily let me skip the field in the serialized version of my
>> data.
>>
>> I thought about using destructuring like so:
>>
>> accountToJson : Account -> Json.Encode.Value
>> accountToJson {id, name} = Json.Encode.object
>> [ ("id", Json.Encode.int id)
>> , ("name", Json.Encode.string name)
>> ]
>>
>>
>>
>> But according to the documentation
>> <http://elm-lang.org/docs/records#pattern-matching>, this will compile
>> fine even if Account gains a new record.
>>
>> Any ideas on how to add this bit of type-safety to my application?
>>
>
--
You received this message because you are subscribed to the Google Groups "Elm
Discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.