A music player that connects to your cloud/distributed storage.
5
fork

Configure Feed

Select the types of activity you want to include in your feed.

at main 74 lines 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