mirror of
https://github.com/logos-messaging/logos-messaging-nim.git
synced 2026-05-16 23:39:27 +00:00
* 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
72 lines
2.2 KiB
Nim
72 lines
2.2 KiB
Nim
import chronicles, std/[net, options, sequtils], results
|
|
import ../waku_conf
|
|
|
|
logScope:
|
|
topics = "waku conf builder discv5"
|
|
|
|
const
|
|
DefaultDiscv5Enabled*: bool = false
|
|
DefaultDiscv5BitsPerHop*: int = 1
|
|
DefaultDiscv5BucketIpLimit*: uint = 2
|
|
DefaultDiscv5EnrAutoUpdate*: bool = true
|
|
DefaultDiscv5TableIpLimit*: uint = 10
|
|
DefaultDiscv5UdpPort*: Port = Port(0)
|
|
|
|
###########################
|
|
## Discv5 Config Builder ##
|
|
###########################
|
|
type Discv5ConfBuilder* = object
|
|
enabled*: Option[bool]
|
|
|
|
bootstrapNodes*: seq[string]
|
|
bitsPerHop*: Option[int]
|
|
bucketIpLimit*: Option[uint]
|
|
enrAutoUpdate*: Option[bool]
|
|
tableIpLimit*: Option[uint]
|
|
udpPort*: Option[Port]
|
|
|
|
proc init*(T: type Discv5ConfBuilder): Discv5ConfBuilder =
|
|
Discv5ConfBuilder()
|
|
|
|
proc withEnabled*(b: var Discv5ConfBuilder, enabled: bool) =
|
|
b.enabled = some(enabled)
|
|
|
|
proc withBitsPerHop*(b: var Discv5ConfBuilder, bitsPerHop: int) =
|
|
b.bitsPerHop = some(bitsPerHop)
|
|
|
|
proc withBucketIpLimit*(b: var Discv5ConfBuilder, bucketIpLimit: uint) =
|
|
b.bucketIpLimit = some(bucketIpLimit)
|
|
|
|
proc withEnrAutoUpdate*(b: var Discv5ConfBuilder, enrAutoUpdate: bool) =
|
|
b.enrAutoUpdate = some(enrAutoUpdate)
|
|
|
|
proc withTableIpLimit*(b: var Discv5ConfBuilder, tableIpLimit: uint) =
|
|
b.tableIpLimit = some(tableIpLimit)
|
|
|
|
proc withUdpPort*(b: var Discv5ConfBuilder, udpPort: Port) =
|
|
b.udpPort = some(udpPort)
|
|
|
|
proc withUdpPort*(b: var Discv5ConfBuilder, udpPort: uint16) =
|
|
b.udpPort = some(Port(udpPort))
|
|
|
|
proc withBootstrapNodes*(b: var Discv5ConfBuilder, bootstrapNodes: seq[string]) =
|
|
# TODO: validate ENRs?
|
|
b.bootstrapNodes = concat(b.bootstrapNodes, bootstrapNodes)
|
|
|
|
proc build*(b: Discv5ConfBuilder): Result[Option[Discv5Conf], string] =
|
|
if not b.enabled.get(DefaultDiscv5Enabled):
|
|
return ok(none(Discv5Conf))
|
|
|
|
return ok(
|
|
some(
|
|
Discv5Conf(
|
|
bootstrapNodes: b.bootstrapNodes,
|
|
bitsPerHop: b.bitsPerHop.get(DefaultDiscv5BitsPerHop),
|
|
bucketIpLimit: b.bucketIpLimit.get(DefaultDiscv5BucketIpLimit),
|
|
enrAutoUpdate: b.enrAutoUpdate.get(DefaultDiscv5EnrAutoUpdate),
|
|
tableIpLimit: b.tableIpLimit.get(DefaultDiscv5TableIpLimit),
|
|
udpPort: b.udpPort.get(DefaultDiscv5UdpPort),
|
|
)
|
|
)
|
|
)
|