logos-messaging-nim/waku/factory/conf_builder/rest_server_conf_builder.nim
Fabiana Cecin 098c6f2a6d
Improve config
* Soft-deprecate --cluster-id=N triggering the associated preset selection
* Rewrite applyNetworkConf to apply user-set fields over preset fields
* Add createNode(preset, mode, overrides, additions) nim api
* Generate WakuNodeConfOverlay (all Option fields) from WakuNodeConf
* New parser for configJson handles new messaging shape and full conf shape
* Change all confbuilder defaults from literal values to DefaultXXX consts
* Change int/bool WakuNodeConf fields to Option to get user intent w/o sentinels
* Make Option CLI default-value help mention defaults now owned by confbuilder
* Misc refactors, fixes
* Add tests
2026-05-08 01:19:39 -03:00

68 lines
2.0 KiB
Nim

import chronicles, std/[net, options, sequtils], results
import ../waku_conf
logScope:
topics = "waku conf builder rest server"
const
DefaultRestEnabled*: bool = false
DefaultRestPort*: Port = Port(0)
DefaultRestAdmin*: bool = false
################################
## REST Server Config Builder ##
################################
type RestServerConfBuilder* = object
enabled*: Option[bool]
allowOrigin*: seq[string]
listenAddress*: Option[IpAddress]
port*: Option[Port]
admin*: Option[bool]
relayCacheCapacity*: Option[uint32]
proc init*(T: type RestServerConfBuilder): RestServerConfBuilder =
RestServerConfBuilder()
proc withEnabled*(b: var RestServerConfBuilder, enabled: bool) =
b.enabled = some(enabled)
proc withAllowOrigin*(b: var RestServerConfBuilder, allowOrigin: seq[string]) =
b.allowOrigin = concat(b.allowOrigin, allowOrigin)
proc withListenAddress*(b: var RestServerConfBuilder, listenAddress: IpAddress) =
b.listenAddress = some(listenAddress)
proc withPort*(b: var RestServerConfBuilder, port: Port) =
b.port = some(port)
proc withPort*(b: var RestServerConfBuilder, port: uint16) =
b.port = some(Port(port))
proc withAdmin*(b: var RestServerConfBuilder, admin: bool) =
b.admin = some(admin)
proc withRelayCacheCapacity*(b: var RestServerConfBuilder, relayCacheCapacity: uint32) =
b.relayCacheCapacity = some(relayCacheCapacity)
proc build*(b: RestServerConfBuilder): Result[Option[RestServerConf], string] =
if not b.enabled.get(DefaultRestEnabled):
return ok(none(RestServerConf))
if b.listenAddress.isNone():
return err("restServer.listenAddress is not specified")
if b.relayCacheCapacity.isNone():
return err("restServer.relayCacheCapacity is not specified")
return ok(
some(
RestServerConf(
allowOrigin: b.allowOrigin,
listenAddress: b.listenAddress.get(),
port: b.port.get(DefaultRestPort),
admin: b.admin.get(DefaultRestAdmin),
relayCacheCapacity: b.relayCacheCapacity.get(),
)
)
)