A music player that connects to your cloud/distributed storage.
at main 1.8 kB view raw
1module Sources.Encoding exposing (decode, decoder, encode, encodeData, serviceDecoder) 2 3{-| Encoding. 4-} 5 6import Dict 7import Json.Decode as Decode 8import Json.Encode as Encode 9import Sources exposing (..) 10import Sources.Services as Services 11 12 13 14-- ENCODE 15 16 17encode : Source -> Encode.Value 18encode source = 19 Encode.object 20 [ ( "id", Encode.string source.id ) 21 , ( "data", encodeData source.data ) 22 , ( "directoryPlaylists", Encode.bool source.directoryPlaylists ) 23 , ( "enabled", Encode.bool source.enabled ) 24 , ( "service", Encode.string (Services.typeToKey source.service) ) 25 ] 26 27 28encodeData : SourceData -> Encode.Value 29encodeData data = 30 data 31 |> Dict.toList 32 |> List.map (Tuple.mapSecond Encode.string) 33 |> Encode.object 34 35 36 37-- DECODE 38 39 40decode : Decode.Value -> Maybe Source 41decode value = 42 value 43 |> Decode.decodeValue decoder 44 |> Result.toMaybe 45 46 47decoder : Decode.Decoder Source 48decoder = 49 Decode.map5 Source 50 (Decode.field "id" Decode.string) 51 (Decode.field "data" (Decode.dict Decode.string)) 52 (Decode.field "directoryPlaylists" Decode.bool 53 |> Decode.maybe 54 |> Decode.map (Maybe.withDefault True) 55 ) 56 (Decode.field "enabled" Decode.bool 57 |> Decode.maybe 58 |> Decode.map (Maybe.withDefault True) 59 ) 60 (Decode.field "service" serviceDecoder) 61 62 63serviceDecoder : Decode.Decoder Service 64serviceDecoder = 65 Decode.andThen 66 (\key -> 67 case Services.keyToType key of 68 Just service -> 69 Decode.succeed service 70 71 Nothing -> 72 Decode.fail "Unrecognizable source service" 73 ) 74 Decode.string