A music player that connects to your cloud/distributed storage.
at main 1.6 kB view raw
1module Settings exposing (Settings, decoder, encode) 2 3import Json.Decode as Json 4import Json.Decode.Pipeline exposing (optional) 5import Json.Encode 6import Maybe.Extra as Maybe 7 8 9 10-- 🌳 11 12 13type alias Settings = 14 { backgroundImage : Maybe String 15 , coverSelectionReducesPool : Bool 16 , hideDuplicates : Bool 17 , lastFm : Maybe String 18 , processAutomatically : Bool 19 , rememberProgress : Bool 20 } 21 22 23 24-- ENCODING 25 26 27encode : Settings -> Json.Value 28encode settings = 29 Json.Encode.object 30 [ ( "backgroundImage" 31 , Maybe.unwrap Json.Encode.null Json.Encode.string settings.backgroundImage 32 ) 33 , ( "coverSelectionReducesPool" 34 , Json.Encode.bool settings.coverSelectionReducesPool 35 ) 36 , ( "hideDuplicates" 37 , Json.Encode.bool settings.hideDuplicates 38 ) 39 , ( "lastFm" 40 , Maybe.unwrap Json.Encode.null Json.Encode.string settings.lastFm 41 ) 42 , ( "processAutomatically" 43 , Json.Encode.bool settings.processAutomatically 44 ) 45 , ( "rememberProgress" 46 , Json.Encode.bool settings.rememberProgress 47 ) 48 ] 49 50 51 52-- DECODING 53 54 55decoder : Json.Decoder Settings 56decoder = 57 Json.succeed Settings 58 |> optional "backgroundImage" (Json.maybe Json.string) Nothing 59 |> optional "coverSelectionReducesPool" Json.bool True 60 |> optional "hideDuplicates" Json.bool False 61 |> optional "lastFm" (Json.maybe Json.string) Nothing 62 |> optional "processAutomatically" Json.bool True 63 |> optional "rememberProgress" Json.bool True