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