DEV Community

Discussion on: Keeping decoders simple

Collapse
 
digitalsatori profile image
Tony Gu • Edited

Great write up! Thank you very much for sharing your experience with us.

I cached two errors when trying your code in Ellie.

  1. The individualDecoder should be like this:
individualDecoder : Decoder Individual
individualDecoder =
    Decode.map4
        (\id species name owner -> Individual id species name owner)
        (Decode.field "id" Decode.int)
        (Decode.field "species" Decode.string)
        (Decode.field "name" Decode.string)
        (Decode.maybe <| Decode.field "owner" Decode.int)
  1. The addIfPet function should be like this:
addIfPet : Individual -> Dict Int (List Pet) -> Dict Int (List Pet)
addIfPet individual petsCaredFor =
    case pet individual of
        Nothing ->
            petsCaredFor

        Just newPet ->
            case individual.owner of
                Just ownerid ->
                    Dict.update ownerid (Just << addOrInit newPet) petsCaredFor

                _ ->
                    petsCaredFor

I made the change accordingly in my Ellie and print some debug info on screen to visualize the decoding and converting process

Collapse
 
jwoudenberg profile image
Jasper Woudenberg

Amazing, thank you! Would you be okay if I linked your Ellie instead of mine from the post? I'll attribute it to you of course!

Collapse
 
digitalsatori profile image
Tony Gu

Sure, That's totally fine. I'm glad it helped.