From 23abf3466b71261d68bac35116677b58154c6d27 Mon Sep 17 00:00:00 2001 From: fryorcraken Date: Mon, 7 Apr 2025 16:32:26 +1000 Subject: [PATCH] little macro --- waku/factory/internal_config.nim | 2 +- waku/factory/waku_conf.nim | 1 + waku/factory/waku_conf_builder.nim | 42 ++++++++++++++++++++---------- 3 files changed, 30 insertions(+), 15 deletions(-) diff --git a/waku/factory/internal_config.nim b/waku/factory/internal_config.nim index 1ccdd7bcc..ab27384d6 100644 --- a/waku/factory/internal_config.nim +++ b/waku/factory/internal_config.nim @@ -105,7 +105,7 @@ proc networkConfiguration*(conf: WakuConf, clientId: string): NetConfigResult = # Resolve and use DNS domain IP if conf.dns4DomainName.isSome() and extIp.isNone(): try: - let dnsRes = waitFor dnsResolve(conf.dns4DomainName, conf) + let dnsRes = waitFor dnsResolve(conf.dns4DomainName.get(), conf) if dnsRes.isErr(): return err($dnsRes.error) # Pass error down the stack diff --git a/waku/factory/waku_conf.nim b/waku/factory/waku_conf.nim index e5cbeac05..61e6f47b9 100644 --- a/waku/factory/waku_conf.nim +++ b/waku/factory/waku_conf.nim @@ -48,6 +48,7 @@ type WakuConf* = ref object filter*: bool lightPush*: bool peerExchange*: bool + storeSync*: bool discv5Conf*: Option[Discv5Conf] diff --git a/waku/factory/waku_conf_builder.nim b/waku/factory/waku_conf_builder.nim index 1550c8d2a..7d575d276 100644 --- a/waku/factory/waku_conf_builder.nim +++ b/waku/factory/waku_conf_builder.nim @@ -1,7 +1,7 @@ import libp2p/crypto/crypto, libp2p/multiaddress, - std/[net, options, sequtils], + std/[macros, net, options, sequtils, strutils], chronicles, results @@ -174,6 +174,7 @@ type WakuConfBuilder* = ref object filter: Option[bool] lightPush: Option[bool] peerExchange: Option[bool] + storeSync: Option[bool] clusterConf: Option[ClusterConf] @@ -198,23 +199,29 @@ proc init*(T: type WakuConfBuilder): WakuConfBuilder = rlnRelayConf: RlnRelayConfBuilder.init(), discv5Conf: Discv5ConfBuilder.init() ) -proc withClusterConf*(builder: var WakuConfBuilder, clusterConf: ClusterConf) = - builder.clusterConf = some(clusterConf) +macro confWith(argName: untyped, argType: untyped) = + argName.expectKind nnkIdent + argType.expectKind nnkIdent -proc withNodeKey*(builder: var WakuConfBuilder, nodeKey: PrivateKey) = - builder.nodeKey = some(nodeKey) + result = newStmtList() -proc withClusterId*(builder: var WakuConfBuilder, clusterId: uint16) = - builder.clusterid = some(clusterId) + let procName = ident("with" & capitalizeAscii($argName)) + let builderIdent = ident("builder") + let builderVar = newDotExpr(builderIdent, ident($argName)) + let resVar = ident($argName) -proc withShards*(builder: var WakuConfBuilder, shards: seq[uint16]) = - builder.shards = some(shards) + result.add quote do: + proc `procName`*(`builderIdent`: var WakuConfBuilder, `resVar`: `argType`) = + `builderVar` = some(`argName`) -proc withRelay*(builder: var WakuConfBuilder, relay: bool) = - builder.relay = some(relay) - -proc withMaxMessageSizeBytes*(builder: var WakuConfBuilder, maxMessageSizeBytes: int) = - builder.maxMessageSizeBytes = some(maxMessageSizeBytes) +confWith(clusterConf, ClusterConf) +confWith(nodeKey, PrivateKey) +confWith(clusterId, uint16) +confWith(shards, seq[uint16]) +confWith(relay, bool) +confWith(filter, bool) +confWith(storeSync, bool) +confWith(maxMessageSizeBytes, int) proc withDiscv5*(builder: var WakuConfBuilder, discv5: bool) = builder.discv5Conf.withDiscv5(discv5) @@ -283,6 +290,13 @@ proc build*( warn "whether to mount peerExchange is not specified, defaulting to not mounting" false + let storeSync = + if builder.storeSync.isSome: + builder.storeSync.get() + else: + warn "whether to mount storeSync is not specified, defaulting to not mounting" + false + # Apply cluster conf - values passed manually override cluster conf # Should be applied **first**, before individual values are pulled if builder.clusterConf.isSome: