Vapora/nickel/vapora/contracts.ncl

69 lines
1.3 KiB
Text
Raw Permalink Normal View History

let LogLevel = std.contract.custom (
fun label =>
fun value =>
let valid = ["trace", "debug", "info", "warn", "error"] in
if std.array.any (fun x => x == value) valid then
'Ok value
else
'Error {
message = "Invalid log_level '%{value}'.\nValid values: trace | debug | info | warn | error"
}
) in
let Port = std.contract.custom (
fun label =>
fun value =>
if value >= 1 && value <= 65535 then
'Ok value
else
'Error {
message = "Invalid port '%{std.to_string value}'.\nValid range: 1 - 65535"
}
) in
{
TlsConfig = {
enabled | Bool,
cert_path | String,
key_path | String,
},
ServerConfig = {
host | String,
port | Port,
tls | TlsConfig,
},
DatabaseConfig = {
url | String,
max_connections | Number,
},
NatsConfig = {
url | String,
stream_name | String,
},
AuthConfig = {
jwt_secret | String,
jwt_expiration_hours | Number,
},
LoggingConfig = {
level | LogLevel,
json | Bool,
},
MetricsConfig = {
enabled | Bool,
port | Port,
},
NotificationConfig = {
on_task_done | Array String | default = [],
on_proposal_approved | Array String | default = [],
on_proposal_rejected | Array String | default = [],
on_agent_inactive | Array String | default = [],
},
}