import Json.Decode as Decode exposing (Decoder, int, float, list, string)
import Json.Decode.Pipeline exposing (required, optional)
import Json.Encode as Encode
-- ###################################################
-- NOTE: Model
-- ###################################################
type alias Test =
{ id : String
, name : String
, instructions : String
, sections : List Section
}
type alias Section =
{ name : String
, questions : List Question
}
type alias Question =
{ question : String
, variable : String
}
emptyTest : Test
emptyTest =
{ id = ""
, name = ""
, instructions = ""
, sections = []
}
questionDecode : Decoder Question
questionDecode =
Decode.succeed Question
|> required "question" string
|> required "variable" string
sectionDecoder : Decoder Section
sectionDecoder =
Decode.succeed Section
|> required "name" string
|> required "questions" (list questionDecode)
testDecoder : Decoder Test
testDecoder =
Decode.succeed Test
|> optional "id" string ""
|> required "name" string
|> required "instructions" string
|> required "sections" (list sectionDecoder)
questionEncoder : Question -> Encode.Value
questionEncoder question =
Encode.object
[ ( "question", Encode.string question.question )
, ( "variable", Encode.string question.variable )
]
sectionEncoder : Section -> Encode.Value
sectionEncoder section =
Encode.object
[ ( "name", Encode.string section.name )
, ( "questions", Encode.list questionEncoder section.questions)
]
newTestEncoder : Test -> Encode.Value
newTestEncoder test =
Encode.object
[ ( "name", Encode.string test.name )
, ( "instructions", Encode.string test.instructions )
, ( "sections", Encode.list sectionEncoder test.sections )
]
1 Like
I don’t understand what you are trying to communicate
I saw this post How to encode/decode nested entities? but is not complete and I wanted to show a complete example of how to use correctly a nested model with Decode and Encode
1 Like
This topic was automatically closed 10 days after the last reply. New replies are no longer allowed.