102 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Elm
		
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Elm
		
	
	
module Internal.Values.Settings exposing
 | 
						|
    ( Settings, init
 | 
						|
    , coder, encode, decoder
 | 
						|
    )
 | 
						|
 | 
						|
{-|
 | 
						|
 | 
						|
 | 
						|
# Settings
 | 
						|
 | 
						|
The Settings module exposes a data type to configure settings in the enveloped
 | 
						|
data types.
 | 
						|
 | 
						|
@docs Settings, init
 | 
						|
 | 
						|
 | 
						|
## JSON coders
 | 
						|
 | 
						|
@docs coder, encode, decoder
 | 
						|
 | 
						|
-}
 | 
						|
 | 
						|
import Internal.Config.Default as Default
 | 
						|
import Internal.Config.Text as Text
 | 
						|
import Internal.Tools.Json as Json
 | 
						|
 | 
						|
 | 
						|
{-| Custom settings that can be manipulated by the user. These serve as a
 | 
						|
configuration for how the Elm SDK should behave.
 | 
						|
 | 
						|
Custom settings are always part of the Envelope, allowing all functions to
 | 
						|
behave under the user's preferred settings.
 | 
						|
 | 
						|
-}
 | 
						|
type alias Settings =
 | 
						|
    { currentVersion : String
 | 
						|
    , deviceName : String
 | 
						|
    , syncTime : Int
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
{-| Define how a Settings type can be encoded to and decoded from a JSON object.
 | 
						|
-}
 | 
						|
coder : Json.Coder Settings
 | 
						|
coder =
 | 
						|
    Json.object3
 | 
						|
        { name = Text.docs.settings.name
 | 
						|
        , description = Text.docs.settings.description
 | 
						|
        , init = Settings
 | 
						|
        }
 | 
						|
        (Json.field.optional.withDefault
 | 
						|
            { fieldName = "currentVersion"
 | 
						|
            , toField = .currentVersion
 | 
						|
            , description = Text.fields.settings.currentVersion
 | 
						|
            , coder = Json.string
 | 
						|
            , default = Tuple.pair Default.currentVersion []
 | 
						|
            , defaultToString = identity
 | 
						|
            }
 | 
						|
        )
 | 
						|
        (Json.field.optional.withDefault
 | 
						|
            { fieldName = "deviceName"
 | 
						|
            , toField = .deviceName
 | 
						|
            , description = Text.fields.settings.deviceName
 | 
						|
            , coder = Json.string
 | 
						|
            , default = Tuple.pair Default.deviceName []
 | 
						|
            , defaultToString = identity
 | 
						|
            }
 | 
						|
        )
 | 
						|
        (Json.field.optional.withDefault
 | 
						|
            { fieldName = "syncTime"
 | 
						|
            , toField = .syncTime
 | 
						|
            , description = Text.fields.settings.syncTime
 | 
						|
            , coder = Json.int
 | 
						|
            , default = Tuple.pair Default.syncTime []
 | 
						|
            , defaultToString = String.fromInt
 | 
						|
            }
 | 
						|
        )
 | 
						|
 | 
						|
 | 
						|
{-| Decode settings from a JSON value.
 | 
						|
-}
 | 
						|
decoder : Json.Decoder Settings
 | 
						|
decoder =
 | 
						|
    Json.decode coder
 | 
						|
 | 
						|
 | 
						|
{-| Encode the settings into a JSON value.
 | 
						|
-}
 | 
						|
encode : Json.Encoder Settings
 | 
						|
encode =
 | 
						|
    Json.encode coder
 | 
						|
 | 
						|
 | 
						|
{-| Create a new Settings module based on default values
 | 
						|
-}
 | 
						|
init : Settings
 | 
						|
init =
 | 
						|
    { currentVersion = Default.currentVersion
 | 
						|
    , deviceName = Default.deviceName
 | 
						|
    , syncTime = Default.syncTime
 | 
						|
    }
 |