A music player that connects to your cloud/distributed storage. diffuse.sh
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374module 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 = Decode.decodeValue decoder value |> 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