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.

Reply via email to