module Playlists.Encoding exposing (decoder, encode, encodePlaylistTrack, playlistTrackDecoder) import Json.Decode as Decode import Json.Decode.Ext as Decode import Json.Encode as Encode import Json.Encode.Ext exposing (..) import Playlists exposing (..) -- ENCODE encode : Playlist -> Encode.Value encode playlist = Encode.object [ ( "autoGenerated", Encode.bool playlist.autoGenerated ) , ( "name", Encode.string playlist.name ) , ( "public", Encode.bool playlist.public ) , ( "tracks", Encode.list encodePlaylistTrack playlist.tracks ) ] encodePlaylistTrack : PlaylistTrack -> Encode.Value encodePlaylistTrack playlistTrack = Encode.object [ ( "album", encodeMaybe playlistTrack.album Encode.string ) , ( "artist", encodeMaybe playlistTrack.artist Encode.string ) , ( "title", Encode.string playlistTrack.title ) ] -- DECODE decoder : Decode.Decoder Playlist decoder = Decode.map4 Playlist (Decode.field "autoGenerated" Decode.bool) (Decode.field "name" Decode.string) (Decode.optionalField "public" Decode.bool False) (Decode.field "tracks" <| Decode.list playlistTrackDecoder) playlistTrackDecoder : Decode.Decoder PlaylistTrack playlistTrackDecoder = Decode.map3 PlaylistTrack (Decode.maybe <| Decode.field "album" Decode.string) (Decode.maybe <| Decode.field "artist" Decode.string) (Decode.field "title" Decode.string)