config: use new form + add example [skip ci]
* also unstage config.dhall and add it to the list of the ignored
This commit is contained in:
parent
746eb82f67
commit
d9265cafa8
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,6 +1,9 @@
|
|||||||
# main binary
|
# main binary
|
||||||
pcmt
|
pcmt
|
||||||
|
|
||||||
|
# dev config.
|
||||||
|
/config.dhall
|
||||||
|
|
||||||
# air tmp dir
|
# air tmp dir
|
||||||
/tmp
|
/tmp
|
||||||
|
|
||||||
|
95
config.dhall
95
config.dhall
@ -1,95 +0,0 @@
|
|||||||
-- convenience funcs for validation.
|
|
||||||
let Prelude =
|
|
||||||
https://prelude.dhall-lang.org/v20.2.0/package.dhall
|
|
||||||
sha256:a6036bc38d883450598d1de7c98ead113196fe2db02e9733855668b18096f07b
|
|
||||||
|
|
||||||
let NuConfig =
|
|
||||||
-- | define a configuration schema.
|
|
||||||
{ Type =
|
|
||||||
{ Port : Natural
|
|
||||||
, AppName : Text
|
|
||||||
, LiveMode : Bool
|
|
||||||
, DevelMode : Bool
|
|
||||||
, LoginCookieName : Optional Text
|
|
||||||
}
|
|
||||||
, default =
|
|
||||||
{ Port = 3000
|
|
||||||
, AppName = "pcmt"
|
|
||||||
, LiveMode = False
|
|
||||||
, DevelMode = False
|
|
||||||
, LoginCookieName = None Text
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let NuConfig/validate
|
|
||||||
: NuConfig.Type -> Type
|
|
||||||
=
|
|
||||||
-- | define validation.
|
|
||||||
\(c : NuConfig.Type) ->
|
|
||||||
let expected = { validPort = True }
|
|
||||||
|
|
||||||
let actual =
|
|
||||||
{ validPort =
|
|
||||||
-- | make sure port number belongs to the <1;65535> range.
|
|
||||||
Prelude.Natural.lessThanEqual 1 c.Port
|
|
||||||
&& Prelude.Natural.lessThanEqual c.Port 65535
|
|
||||||
}
|
|
||||||
|
|
||||||
in expected === actual
|
|
||||||
|
|
||||||
let nuconf = NuConfig::{ LiveMode = True, DevelMode = True }
|
|
||||||
|
|
||||||
let _ =
|
|
||||||
-- | validate the configuration.
|
|
||||||
assert : NuConfig/validate nuconf
|
|
||||||
|
|
||||||
let Config =
|
|
||||||
-- | define configuration schema.
|
|
||||||
{ Host : Text
|
|
||||||
, Port : Natural
|
|
||||||
, AppName : Text
|
|
||||||
, LiveMode : Bool
|
|
||||||
, DevelMode : Bool
|
|
||||||
, SessionCookieName : Text
|
|
||||||
, SessionCookieSecret : Text
|
|
||||||
}
|
|
||||||
|
|
||||||
let defconf
|
|
||||||
-- | a full default configuration.
|
|
||||||
-- | TODO: have this reside on the Internet and import it similar to how
|
|
||||||
-- | the Dhall Prelude is imported.
|
|
||||||
: Config
|
|
||||||
= { Host = ""
|
|
||||||
, Port = 3000
|
|
||||||
, AppName = "pcmt"
|
|
||||||
, LiveMode = False
|
|
||||||
, DevelMode = False
|
|
||||||
, SessionCookieName = "sessionz"
|
|
||||||
, SessionCookieSecret = "secret"
|
|
||||||
}
|
|
||||||
|
|
||||||
let conf
|
|
||||||
: Config
|
|
||||||
= defconf // { LiveMode = True, DevelMode = False }
|
|
||||||
|
|
||||||
let Config/validate
|
|
||||||
: Config -> Type
|
|
||||||
=
|
|
||||||
-- | define validation.
|
|
||||||
\(config : Config) ->
|
|
||||||
let expected = { validPort = True }
|
|
||||||
|
|
||||||
let actual =
|
|
||||||
{ validPort =
|
|
||||||
-- | make sure port number belongs to the <1;65535> range.
|
|
||||||
Prelude.Natural.lessThanEqual 1 config.Port
|
|
||||||
&& Prelude.Natural.lessThanEqual config.Port 65535
|
|
||||||
}
|
|
||||||
|
|
||||||
in expected === actual
|
|
||||||
|
|
||||||
let _ =
|
|
||||||
-- | validate the configuration.
|
|
||||||
assert : Config/validate conf
|
|
||||||
|
|
||||||
in conf
|
|
22
exampleConfig.dhall
Normal file
22
exampleConfig.dhall
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
{- import config schema that is integrity-check protected -}
|
||||||
|
let ConfigSchema =
|
||||||
|
https://git.dotya.ml/mirre-mt/pcmt/raw/branch/development/config/schema/package.dhall
|
||||||
|
sha256:ad7ba86d5d388a99b7543faa0e4c81ba1d9b78fa6c32fdaf4ac4477089d177be
|
||||||
|
|
||||||
|
let Config = ConfigSchema.Schema
|
||||||
|
|
||||||
|
let c =
|
||||||
|
{- below we allow overriding config values using env vars -}
|
||||||
|
Config::{
|
||||||
|
, Host = env:PCMT_HOST as Text ? Config.default.Host
|
||||||
|
, LiveMode = env:PCMT_LIVE ? True
|
||||||
|
, DevelMode = env:PCMT_DEVEL ? True
|
||||||
|
}
|
||||||
|
|
||||||
|
let _ =
|
||||||
|
{- validate that the above adheres to the config schema and contains valid
|
||||||
|
entries (not everything gets validated though).
|
||||||
|
-}
|
||||||
|
assert : ConfigSchema.Schema/validate c
|
||||||
|
|
||||||
|
in c
|
Loading…
Reference in New Issue
Block a user