A music player that connects to your cloud/distributed storage. diffuse.sh
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475module Sources.Encoding exposing (decode, decoder, encode, encodeData, serviceDecoder)
{-| Encoding.-}
import Dictimport Json.Decode as Decodeimport Json.Encode as Encodeimport Sources exposing (..)import Sources.Services as Services
-- ENCODE
encode : Source -> Encode.Valueencode source = Encode.object [ ( "id", Encode.string source.id ) , ( "data", encodeData source.data ) , ( "directoryPlaylists", Encode.bool source.directoryPlaylists ) , ( "enabled", Encode.bool source.enabled ) , ( "service", Encode.string (Services.typeToKey source.service) ) ]
encodeData : SourceData -> Encode.ValueencodeData data = data |> Dict.toList |> List.map (Tuple.mapSecond Encode.string) |> Encode.object
-- DECODE
decode : Decode.Value -> Maybe Sourcedecode value = value |> Decode.decodeValue decoder |> Result.toMaybe
decoder : Decode.Decoder Sourcedecoder = Decode.map5 Source (Decode.field "id" Decode.string) (Decode.field "data" (Decode.dict Decode.string)) (Decode.field "directoryPlaylists" Decode.bool |> Decode.maybe |> Decode.map (Maybe.withDefault True) ) (Decode.field "enabled" Decode.bool |> Decode.maybe |> Decode.map (Maybe.withDefault True) ) (Decode.field "service" serviceDecoder)
serviceDecoder : Decode.Decoder ServiceserviceDecoder = Decode.andThen (\key -> case Services.keyToType key of Just service -> Decode.succeed service
Nothing -> Decode.fail "Unrecognizable source service" ) Decode.string