From ce918b081921f364fa984806b49899c467a72b4e Mon Sep 17 00:00:00 2001 From: Fabiana Cecin Date: Thu, 16 Jul 2026 14:02:17 -0300 Subject: [PATCH] chore: replace Option with Opt (#4035) * change all usage of std.options.Option[T] to results.Opt[T] * fix broken apps and examples (to validate refactor) * removed all std/options code added for libp2p v2 migration * add broker Opt codec to persistency/backend_comm.nim * add a readValue overload for Opt[T] in tools/confutils/cli_args.nim * keep Option where required (Presto, confutils' config_file.nim) * Change generateRlnProof error handling * Fix imports --- apps/benchmarks/benchmarks.nim | 3 +- apps/chat2/chat2.nim | 26 +-- apps/chat2/config_chat2.nim | 9 +- apps/chat2bridge/chat2bridge.nim | 11 +- apps/chat2bridge/config_chat2bridge.nim | 4 +- apps/chat2mix/chat2mix.nim | 40 ++--- apps/chat2mix/config_chat2mix.nim | 8 +- .../diagnose_connections.nim | 2 +- apps/liteprotocoltester/legacy_publisher.nim | 4 +- .../liteprotocoltester/liteprotocoltester.nim | 7 +- apps/liteprotocoltester/publisher.nim | 2 +- apps/liteprotocoltester/receiver.nim | 5 +- .../service_peer_management.nim | 21 +-- apps/liteprotocoltester/statistics.nim | 14 +- apps/liteprotocoltester/tester_config.nim | 2 +- apps/liteprotocoltester/tester_message.nim | 31 ++-- apps/liteprotocoltester/v3_publisher.nim | 8 +- apps/networkmonitor/networkmonitor.nim | 16 +- apps/wakucanary/wakucanary.nim | 7 +- apps/wakunode2/wakunode2.nim | 2 +- examples/api_example/api_example.nim | 3 - examples/filter_subscriber.nim | 4 +- .../lightpush_mix/lightpush_publisher_mix.nim | 11 +- examples/lightpush_publisher.nim | 6 +- examples/publisher.nim | 13 +- examples/subscriber.nim | 11 +- examples/wakustealthcommitments/node_spec.nim | 19 +- .../stealth_commitment_protocol.nim | 4 +- examples/wakustealthcommitments/wire_spec.nim | 54 +++--- library/kernel_api/protocols/store_api.nim | 14 +- library/liblogosdelivery.nim | 3 +- library/utils.nim | 8 +- logos_delivery/api/conf/channels_conf.nim | 20 +-- .../api/conf/logos_delivery_conf.nim | 11 +- .../api/conf/logos_delivery_conf_json.nim | 6 +- logos_delivery/api/conf/messaging_conf.nim | 66 ++++--- logos_delivery/api/types.nim | 4 +- .../channels/api/channel_lifecycle.nim | 10 +- logos_delivery/channels/reliable_channel.nim | 12 +- .../scalable_data_sync/scalable_data_sync.nim | 4 +- .../channels/segmentation/segmentation.nim | 7 +- logos_delivery/logos_delivery.nim | 9 +- .../recv_service/recv_service.nim | 9 +- .../send_service/delivery_task.nim | 7 +- .../send_service/lightpush_processor.nim | 7 +- .../send_service/relay_processor.nim | 6 +- .../send_service/send_service.nim | 3 +- logos_delivery/messaging/messaging_client.nim | 1 - logos_delivery/waku/api/filter.nim | 7 +- logos_delivery/waku/api/lightpush.nim | 1 - logos_delivery/waku/api/peer_manager.nim | 2 +- logos_delivery/waku/api/publish.nim | 8 +- logos_delivery/waku/api/store.nim | 1 - .../common/databases/db_postgres/dbconn.nim | 1 - .../databases/db_postgres/pgasyncpool.nim | 1 - .../waku/common/databases/db_sqlite.nim | 7 +- logos_delivery/waku/common/enr/builder.nim | 20 +-- .../waku/common/enr/typed_record.nim | 42 ++--- logos_delivery/waku/common/paging.nim | 6 +- logos_delivery/waku/common/protobuf.nim | 4 +- .../common/rate_limit/per_peer_limiter.nim | 8 +- .../common/rate_limit/request_limiter.nim | 19 +- .../common/rate_limit/service_metrics.nim | 5 +- .../waku/common/rate_limit/setting.nim | 2 +- .../rate_limit/single_token_limiter.nim | 16 +- .../waku/common/utils/matterbridge_client.nim | 2 +- logos_delivery/waku/common/utils/nat.nim | 19 +- .../waku/common/utils/parse_size_units.nim | 1 - logos_delivery/waku/compat/option_valueor.nim | 32 ---- .../waku/discovery/autonat_service.nim | 2 +- logos_delivery/waku/discovery/waku_discv5.nim | 35 ++-- .../waku/discovery/waku_dnsdisc.nim | 3 +- .../waku/discovery/waku_kademlia.nim | 23 ++- logos_delivery/waku/factory/builder.nim | 68 +++---- .../conf_builder/discv5_conf_builder.nim | 34 ++-- .../dns_discovery_conf_builder.nim | 14 +- .../filter_service_conf_builder.nim | 26 +-- .../kademlia_discovery_conf_builder.nim | 26 ++- .../metrics_server_conf_builder.nim | 26 +-- .../factory/conf_builder/mix_conf_builder.nim | 29 +-- .../conf_builder/quic_conf_builder.nim | 18 +- .../conf_builder/rate_limit_conf_builder.nim | 12 +- .../conf_builder/rest_server_conf_builder.nim | 30 ++-- .../conf_builder/rln_relay_conf_builder.nim | 54 +++--- .../store_service_conf_builder.nim | 34 ++-- .../conf_builder/store_sync_conf_builder.nim | 24 +-- .../conf_builder/waku_conf_builder.nim | 169 +++++++++-------- .../conf_builder/web_socket_conf_builder.nim | 38 ++-- .../waku/factory/internal_config.nim | 27 ++- logos_delivery/waku/factory/node_factory.nim | 26 +-- logos_delivery/waku/factory/waku_conf.nim | 46 ++--- .../waku/incentivization/common.nim | 6 +- .../incentivization/eligibility_manager.nim | 5 +- .../incentivization/reputation_manager.nim | 26 ++- logos_delivery/waku/incentivization/rpc.nim | 6 +- .../waku/incentivization/rpc_codec.nim | 11 +- logos_delivery/waku/net/net_config.nim | 79 ++++---- .../health_monitor/node_health_monitor.nim | 13 +- .../node/health_monitor/protocol_health.nim | 21 +-- .../waku/node/peer_manager/peer_manager.nim | 50 +++--- .../peer_store/waku_peer_storage.nim | 9 +- .../node/peer_manager/waku_peer_store.nim | 12 +- .../waku/node/subscription_manager.nim | 6 +- logos_delivery/waku/node/waku_metrics.nim | 1 - logos_delivery/waku/node/waku_node.nim | 17 +- logos_delivery/waku/node/waku_node/filter.nim | 9 +- .../waku/node/waku_node/lightpush.nim | 45 ++--- .../waku/node/waku_node/peer_exchange.nim | 9 +- logos_delivery/waku/node/waku_node/ping.nim | 2 - logos_delivery/waku/node/waku_node/relay.nim | 17 +- logos_delivery/waku/node/waku_node/store.nim | 8 +- logos_delivery/waku/node/waku_switch.nim | 12 +- .../waku/persistency/backend_comm.nim | 38 +++- .../waku/persistency/backend_sqlite.nim | 7 +- .../waku/persistency/backend_thread.nim | 2 +- .../waku/persistency/persistency.nim | 7 +- .../waku/persistency/sds_persistency.nim | 2 +- .../waku/requests/node_requests.nim | 5 +- .../waku/rest_api/endpoint/admin/handlers.nim | 7 +- .../waku/rest_api/endpoint/admin/types.nim | 60 +++---- .../waku/rest_api/endpoint/builder.nim | 19 +- .../waku/rest_api/endpoint/debug/client.nim | 2 +- .../waku/rest_api/endpoint/debug/handlers.nim | 1 - .../waku/rest_api/endpoint/debug/types.nim | 18 +- .../waku/rest_api/endpoint/filter/client.nim | 2 +- .../rest_api/endpoint/filter/handlers.nim | 19 +- .../waku/rest_api/endpoint/filter/types.nim | 115 ++++++------ .../rest_api/endpoint/health/handlers.nim | 1 - .../waku/rest_api/endpoint/health/types.nim | 28 ++- .../endpoint/legacy_lightpush/handlers.nim | 7 +- .../endpoint/legacy_lightpush/types.nim | 17 +- .../rest_api/endpoint/lightpush/client.nim | 2 +- .../rest_api/endpoint/lightpush/handlers.nim | 13 +- .../rest_api/endpoint/lightpush/types.nim | 29 +-- .../waku/rest_api/endpoint/origin_handler.nim | 28 ++- .../waku/rest_api/endpoint/relay/handlers.nim | 10 +- .../waku/rest_api/endpoint/relay/types.nim | 57 +++--- .../waku/rest_api/endpoint/rest_serdes.nim | 4 +- .../waku/rest_api/endpoint/serdes.nim | 2 +- .../waku/rest_api/endpoint/server.nim | 9 +- .../waku/rest_api/endpoint/store/client.nim | 8 +- .../waku/rest_api/endpoint/store/handlers.nim | 78 ++++---- .../waku/rest_api/endpoint/store/types.nim | 50 +++--- logos_delivery/waku/rest_api/handlers.nim | 11 +- .../waku/rest_api/message_cache.nim | 14 +- logos_delivery/waku/rln/config.nim | 8 +- .../rln/group_manager/group_manager_base.nim | 18 +- .../group_manager/on_chain/group_manager.nim | 44 ++--- .../group_manager/on_chain/rpc_wrapper.nim | 1 + logos_delivery/waku/rln/proof.nim | 27 ++- logos_delivery/waku/rln/protocol_types.nim | 2 +- logos_delivery/waku/rln/rln.nim | 14 +- logos_delivery/waku/rln/rln/rln_interface.nim | 4 +- logos_delivery/waku/rln/rln/wrappers.nim | 15 +- logos_delivery/waku/waku.nim | 3 +- logos_delivery/waku/waku_archive/archive.nim | 7 +- logos_delivery/waku/waku_archive/common.nim | 13 +- logos_delivery/waku/waku_archive/driver.nim | 10 +- .../waku/waku_archive/driver/builder.nim | 1 - .../driver/postgres_driver/migrations.nim | 1 - .../postgres_driver/postgres_driver.nim | 47 +++-- .../driver/queue_driver/queue_driver.nim | 17 +- .../driver/sqlite_driver/queries.nim | 82 ++++----- .../driver/sqlite_driver/sqlite_driver.nim | 11 +- .../waku_archive/retention_policy/builder.nim | 13 +- .../retention_policy_capacity.nim | 1 - logos_delivery/waku/waku_core/peers.nim | 25 ++- .../waku/waku_core/topics/content_topic.nim | 11 +- .../waku/waku_core/topics/sharding.nim | 3 +- logos_delivery/waku/waku_enr/capabilities.nim | 12 +- logos_delivery/waku/waku_enr/multiaddr.nim | 11 +- logos_delivery/waku/waku_enr/sharding.nim | 29 ++- logos_delivery/waku/waku_filter_v2/client.nim | 6 +- .../waku/waku_filter_v2/protocol.nim | 14 +- logos_delivery/waku/waku_filter_v2/rpc.nim | 16 +- .../waku/waku_filter_v2/rpc_codec.nim | 11 +- .../waku/waku_filter_v2/subscriptions.nim | 3 +- .../waku/waku_keystore/keystore.nim | 3 +- .../waku/waku_lightpush/callbacks.nim | 1 - logos_delivery/waku/waku_lightpush/client.nim | 13 +- logos_delivery/waku/waku_lightpush/common.nim | 26 +-- .../waku/waku_lightpush/protocol.nim | 37 ++-- logos_delivery/waku/waku_lightpush/rpc.nim | 9 +- .../waku/waku_lightpush/rpc_codec.nim | 15 +- .../waku/waku_lightpush/self_req_handler.nim | 4 +- .../waku/waku_lightpush_legacy/client.nim | 5 +- .../waku/waku_lightpush_legacy/protocol.nim | 13 +- .../waku/waku_lightpush_legacy/rpc.nim | 9 +- .../waku/waku_lightpush_legacy/rpc_codec.nim | 15 +- .../self_req_handler.nim | 4 +- .../waku/waku_metadata/protocol.nim | 7 +- logos_delivery/waku/waku_metadata/rpc.nim | 14 +- logos_delivery/waku/waku_mix/protocol.nim | 5 +- .../waku/waku_peer_exchange/client.nim | 27 +-- .../waku/waku_peer_exchange/protocol.nim | 23 ++- .../waku/waku_peer_exchange/rpc.nim | 8 +- .../waku/waku_peer_exchange/rpc_codec.nim | 7 +- logos_delivery/waku/waku_relay/protocol.nim | 1 - .../waku/waku_rendezvous/client.nim | 5 +- .../waku/waku_rendezvous/common.nim | 7 +- .../waku/waku_rendezvous/protocol.nim | 3 +- logos_delivery/waku/waku_store/client.nim | 5 +- logos_delivery/waku/waku_store/common.nim | 28 +-- logos_delivery/waku/waku_store/protocol.nim | 7 +- logos_delivery/waku/waku_store/resume.nim | 13 +- logos_delivery/waku/waku_store/rpc_codec.nim | 34 ++-- .../waku/waku_store/self_req_handler.nim | 1 - .../waku/waku_store_sync/common.nim | 2 +- .../waku/waku_store_sync/reconciliation.nim | 21 +-- .../waku_store_sync/storage/seq_storage.nim | 14 +- .../waku/waku_store_sync/transfer.nim | 1 - tests/api/test_api_health.nim | 8 +- tests/api/test_api_receive.nim | 8 +- tests/api/test_api_send.nim | 4 +- tests/api/test_api_subscription.nim | 12 +- tests/api/test_conf.nim | 71 ++++---- tests/api/test_entry_nodes.nim | 2 +- tests/api/test_node_conf.nim | 2 +- .../test_reliable_channel_send_receive.nim | 4 +- tests/common/test_enr_builder.nim | 36 ++-- tests/common/test_ratelimit_setting.nim | 2 +- tests/common/test_requestratelimiter.nim | 8 +- tests/factory/test_node_factory.nim | 5 +- tests/factory/test_waku_conf.nim | 4 +- .../incentivization/test_poc_eligibility.nim | 18 +- tests/incentivization/test_poc_reputation.nim | 21 +-- tests/incentivization/test_rpc_codec.nim | 4 +- .../peer_store/test_migrations.nim | 2 +- .../peer_store/test_waku_peer_storage.nim | 2 +- tests/node/peer_manager/peer_store/utils.nim | 4 +- tests/node/peer_manager/test_peer_manager.nim | 4 +- tests/node/test_wakunode_filter.nim | 55 +++--- tests/node/test_wakunode_health_monitor.nim | 23 ++- tests/node/test_wakunode_legacy_lightpush.nim | 24 +-- tests/node/test_wakunode_lightpush.nim | 36 ++-- tests/node/test_wakunode_peer_exchange.nim | 15 +- tests/node/test_wakunode_peer_manager.nim | 15 +- tests/node/test_wakunode_relay_rln.nim | 34 ++-- tests/node/test_wakunode_restart.nim | 1 - tests/node/test_wakunode_sharding.nim | 84 ++++----- tests/node/test_wakunode_store.nim | 170 +++++++++--------- tests/node/utils.nim | 2 +- tests/persistency/test_backend.nim | 4 +- tests/persistency/test_encoding.nim | 4 +- tests/persistency/test_facade.nim | 2 +- tests/persistency/test_lifecycle.nim | 2 +- tests/persistency/test_sds_persistency.nim | 2 +- tests/persistency/test_string_lookup.nim | 2 +- tests/test_peer_manager.nim | 42 ++--- tests/test_peer_storage.nim | 6 +- tests/test_relay_peer_exchange.nim | 11 +- tests/test_waku.nim | 8 +- tests/test_waku_enr.nim | 2 +- tests/test_waku_metadata.nim | 2 +- tests/test_waku_netconfig.nim | 70 ++++---- tests/test_waku_protobufs.nim | 6 +- tests/test_waku_rendezvous.nim | 6 +- tests/test_wakunode.nim | 33 ++-- tests/testlib/tables.nim | 2 +- tests/testlib/wakucore.nim | 4 +- tests/testlib/wakunode.nim | 33 ++-- tests/tools/test_confutils_envvar.nim | 13 +- tests/waku_archive/archive_utils.nim | 4 +- tests/waku_archive/test_driver_postgres.nim | 7 +- .../test_driver_postgres_query.nim | 99 +++++----- tests/waku_archive/test_driver_queue.nim | 2 +- .../test_driver_queue_pagination.nim | 46 ++--- .../waku_archive/test_driver_queue_query.nim | 86 ++++----- .../waku_archive/test_driver_sqlite_query.nim | 86 ++++----- tests/waku_archive/test_waku_archive.nim | 36 ++-- tests/waku_core/test_namespaced_topics.nim | 8 +- tests/waku_core/test_peers.nim | 7 +- tests/waku_core/topics/test_pubsub_topic.nim | 2 +- tests/waku_core/topics/test_sharding.nim | 14 +- tests/waku_discv5/test_waku_discv5.nim | 22 +-- tests/waku_discv5/utils.nim | 6 +- tests/waku_enr/utils.nim | 15 +- tests/waku_filter_v2/test_waku_client.nim | 2 +- .../test_waku_filter_dos_protection.nim | 45 ++--- tests/waku_filter_v2/waku_filter_utils.nim | 4 +- tests/waku_kademlia/test_waku_kademlia.nim | 2 +- tests/waku_kademlia/utils.nim | 2 +- tests/waku_lightpush/lightpush_utils.nim | 10 +- tests/waku_lightpush/test_client.nim | 50 +++--- tests/waku_lightpush/test_ratelimit.nim | 20 ++- .../waku_lightpush_legacy/lightpush_utils.nim | 4 +- tests/waku_lightpush_legacy/test_client.nim | 2 +- .../waku_lightpush_legacy/test_ratelimit.nim | 6 +- tests/waku_peer_exchange/test_protocol.nim | 32 ++-- tests/waku_peer_exchange/test_rpc_codec.nim | 2 +- tests/waku_peer_exchange/utils.nim | 7 +- tests/waku_relay/test_protocol.nim | 2 +- tests/waku_relay/test_wakunode_relay.nim | 19 +- tests/waku_relay/utils.nim | 7 +- .../rln/waku_rln_relay_utils.nim | 5 +- .../test_rln_contract_deployment.nim | 5 +- .../test_rln_group_manager_onchain.nim | 22 +-- tests/waku_rln_relay/test_waku_rln_relay.nim | 5 +- .../test_wakunode_rln_relay.nim | 33 ++-- tests/waku_rln_relay/utils.nim | 2 +- tests/waku_rln_relay/utils_offchain.nim | 13 +- tests/waku_rln_relay/utils_onchain.nim | 20 +-- tests/waku_store/store_utils.nim | 2 +- tests/waku_store/test_client.nim | 40 ++--- tests/waku_store/test_resume.nim | 2 +- tests/waku_store/test_rpc_codec.nim | 18 +- tests/waku_store/test_waku_store.nim | 6 +- tests/waku_store/test_wakunode_store.nim | 31 ++-- tests/waku_store_sync/sync_utils.nim | 2 +- tests/waku_store_sync/test_codec.nim | 2 +- tests/waku_store_sync/test_protocol.nim | 37 ++-- tests/waku_store_sync/test_storage.nim | 4 +- tests/wakunode2/test_app.nim | 1 - tests/wakunode2/test_cli_args.nim | 2 +- tests/wakunode2/test_validators.nim | 19 +- tests/wakunode_rest/test_rest_cors.nim | 132 +++++++------- tests/wakunode_rest/test_rest_debug.nim | 4 +- .../wakunode_rest/test_rest_debug_serdes.nim | 3 +- tests/wakunode_rest/test_rest_filter.nim | 20 +-- tests/wakunode_rest/test_rest_health.nim | 13 +- tests/wakunode_rest/test_rest_lightpush.nim | 26 +-- .../test_rest_lightpush_legacy.nim | 18 +- tests/wakunode_rest/test_rest_relay.nim | 43 ++--- .../wakunode_rest/test_rest_relay_serdes.nim | 9 +- tests/wakunode_rest/test_rest_store.nim | 17 +- tools/confutils/cli_args.nim | 77 ++++---- tools/confutils/conf_from_json.nim | 11 +- .../confutils/envvar_serialization/reader.nim | 23 ++- .../confutils/envvar_serialization/writer.nim | 5 +- .../rln_keystore_generator.nim | 6 +- 330 files changed, 2837 insertions(+), 2856 deletions(-) delete mode 100644 logos_delivery/waku/compat/option_valueor.nim diff --git a/apps/benchmarks/benchmarks.nim b/apps/benchmarks/benchmarks.nim index eb1efe98d..f97b64f7e 100644 --- a/apps/benchmarks/benchmarks.nim +++ b/apps/benchmarks/benchmarks.nim @@ -1,5 +1,4 @@ -import - std/[strutils, times, sequtils, osproc], math, results, options, testutils/unittests +import std/[strutils, times, sequtils, osproc], math, results, testutils/unittests import logos_delivery/waku/[ diff --git a/apps/chat2/chat2.nim b/apps/chat2/chat2.nim index 647667b0c..2e57fc015 100644 --- a/apps/chat2/chat2.nim +++ b/apps/chat2/chat2.nim @@ -6,7 +6,7 @@ when not (compileOption("threads")): {.push raises: [].} -import std/[strformat, strutils, times, options, random, sequtils] +import std/[strformat, strutils, times, random, sequtils] import confutils, chronicles, @@ -48,7 +48,7 @@ import ./config_chat2 import libp2p/protocols/pubsub/rpc/messages, libp2p/protocols/pubsub/pubsub -import ../../logos_delivery/waku/rln +import logos_delivery/waku/rln const Help = """ Commands: /[?|help|connect|nick|exit] @@ -215,10 +215,10 @@ proc publish(c: Chat, line: string) = try: if not c.node.wakuLegacyLightPush.isNil(): # Attempt lightpush - (waitFor c.node.legacyLightpushPublish(some(DefaultPubsubTopic), message)).isOkOr: + (waitFor c.node.legacyLightpushPublish(Opt.some(DefaultPubsubTopic), message)).isOkOr: error "failed to publish lightpush message", error = error else: - (waitFor c.node.publish(some(DefaultPubsubTopic), message)).isOkOr: + (waitFor c.node.publish(Opt.some(DefaultPubsubTopic), message)).isOkOr: error "failed to publish message", error = error except CatchableError: error "caught error publishing message: ", error = getCurrentExceptionMsg() @@ -383,25 +383,25 @@ proc processInput(rfd: AsyncFD, rng: crypto.Rng) {.async.} = echo "Connecting to static peers..." await connectToNodes(chat, conf.staticnodes) - var dnsDiscoveryUrl = none(string) + var dnsDiscoveryUrl = Opt.none(string) if conf.fleet != Fleet.none: # Use DNS discovery to connect to selected fleet echo "Connecting to " & $conf.fleet & " fleet using DNS discovery..." if conf.fleet == Fleet.test: - dnsDiscoveryUrl = some( + dnsDiscoveryUrl = Opt.some( "enrtree://AOGYWMBYOUIMOENHXCHILPKY3ZRFEULMFI4DOM442QSZ73TT2A7VI@test.waku.nodes.status.im" ) else: # Connect to sandbox by default - dnsDiscoveryUrl = some( + dnsDiscoveryUrl = Opt.some( "enrtree://AIRVQ5DDA4FFWLRBCHJWUWOO6X6S4ZTZ5B667LQ6AJU6PEYDLRD5O@sandbox.waku.nodes.status.im" ) elif conf.dnsDiscoveryUrl != "": # No pre-selected fleet. Discover nodes via DNS using user config info "Discovering nodes using Waku DNS discovery", url = conf.dnsDiscoveryUrl - dnsDiscoveryUrl = some(conf.dnsDiscoveryUrl) + dnsDiscoveryUrl = Opt.some(conf.dnsDiscoveryUrl) var discoveredNodes: seq[RemotePeerInfo] @@ -437,17 +437,17 @@ proc processInput(rfd: AsyncFD, rng: crypto.Rng) {.async.} = if (conf.storenode != "") or (conf.store == true): await node.mountStore() - var storenode: Option[RemotePeerInfo] + var storenode: Opt[RemotePeerInfo] if conf.storenode != "": let peerInfo = parsePeerInfo(conf.storenode) if peerInfo.isOk(): - storenode = some(peerInfo.value) + storenode = Opt.some(peerInfo.value) else: error "Incorrect conf.storenode", error = peerInfo.error elif discoveredNodes.len > 0: echo "Store enabled, but no store nodes configured. Choosing one at random from discovered peers" - storenode = some(discoveredNodes[rand(0 .. len(discoveredNodes) - 1)]) + storenode = Opt.some(discoveredNodes[rand(0 .. len(discoveredNodes) - 1)]) if storenode.isSome(): # We have a viable storenode. Let's query it for historical messages. @@ -537,14 +537,14 @@ proc processInput(rfd: AsyncFD, rng: crypto.Rng) {.async.} = credIndex: conf.rlnRelayCredIndex, chainId: UInt256.fromBytesBE(conf.rlnRelayChainId.toBytesBE()), ethClientUrls: conf.ethClientUrls.mapIt(string(it)), - creds: some( + creds: Opt.some( RlnCreds(path: conf.rlnRelayCredPath, password: conf.rlnRelayCredPassword) ), userMessageLimit: conf.rlnRelayUserMessageLimit, epochSizeSec: conf.rlnEpochSizeSec, ) - waitFor node.setRlnValidator(rlnConf, spamHandler = some(spamHandler)) + waitFor node.setRlnValidator(rlnConf, spamHandler = Opt.some(spamHandler)) let membershipIndex = node.rln.groupManager.membershipIndex.get() let identityCredential = node.rln.groupManager.idCredentials.get() diff --git a/apps/chat2/config_chat2.nim b/apps/chat2/config_chat2.nim index dfb26eb56..a60f9a7a9 100644 --- a/apps/chat2/config_chat2.nim +++ b/apps/chat2/config_chat2.nim @@ -1,4 +1,5 @@ import + results, chronicles, chronos, confutils, @@ -26,7 +27,7 @@ type .}: LogLevel nodekey* {.desc: "P2P node private key as 64 char hex string.", name: "nodekey".}: - Option[crypto.PrivateKey] + Opt[crypto.PrivateKey] listenAddress* {. defaultValue: defaultListenAddress(config), @@ -234,7 +235,7 @@ type rlnRelayCredIndex* {. desc: "the index of the onchain commitment to use", name: "rln-relay-cred-index" - .}: Option[uint] + .}: Opt[uint] rlnRelayDynamic* {. desc: "Enable waku-rln-relay with on-chain dynamic group management: true|false", @@ -317,9 +318,9 @@ proc parseCmdArg*(T: type Port, p: string): T = proc completeCmdArg*(T: type Port, val: string): seq[string] = return @[] -proc parseCmdArg*(T: type Option[uint], p: string): T = +proc parseCmdArg*(T: type Opt[uint], p: string): T = try: - some(parseUint(p)) + Opt.some(parseUint(p)) except CatchableError: raise newException(ValueError, "Invalid unsigned integer") diff --git a/apps/chat2bridge/chat2bridge.nim b/apps/chat2bridge/chat2bridge.nim index e97eba033..097735c7a 100644 --- a/apps/chat2bridge/chat2bridge.nim +++ b/apps/chat2bridge/chat2bridge.nim @@ -1,7 +1,8 @@ {.push raises: [].} import - std/[tables, times, strutils, hashes, sequtils, json, options], + results, + std/[tables, times, strutils, hashes, sequtils, json], chronos, confutils, chronicles, @@ -102,7 +103,7 @@ proc toChat2(cmb: Chat2MatterBridge, jsonNode: JsonNode) {.async.} = chat2_mb_transfers.inc(labelValues = ["mb_to_chat2"]) - (await cmb.nodev2.publish(some(DefaultPubsubTopic), msg)).isOkOr: + (await cmb.nodev2.publish(Opt.some(DefaultPubsubTopic), msg)).isOkOr: error "failed to publish message", error = error proc toMatterbridge( @@ -156,8 +157,8 @@ proc new*( nodev2Key: crypto.PrivateKey, nodev2BindIp: IpAddress, nodev2BindPort: Port, - nodev2ExtIp = none[IpAddress](), - nodev2ExtPort = none[Port](), + nodev2ExtIp = Opt.none(IpAddress), + nodev2ExtPort = Opt.none(Port), contentTopic: string, ): T {. raises: [Defect, ValueError, KeyError, TLSStreamProtocolError, IOError, LPError] @@ -264,7 +265,7 @@ when isMainModule: ## config, the external port is the same as the bind port. let extPort = if nodev2ExtIp.isSome() and nodev2ExtPort.isNone(): - some(Port(uint16(conf.libp2pTcpPort) + conf.portsShift)) + Opt.some(Port(uint16(conf.libp2pTcpPort) + conf.portsShift)) else: nodev2ExtPort diff --git a/apps/chat2bridge/config_chat2bridge.nim b/apps/chat2bridge/config_chat2bridge.nim index 048fc4d87..0884ff89a 100644 --- a/apps/chat2bridge/config_chat2bridge.nim +++ b/apps/chat2bridge/config_chat2bridge.nim @@ -1,5 +1,5 @@ import - std/options, + results, confutils, confutils/defs, confutils/std/net, @@ -64,7 +64,7 @@ type Chat2MatterbridgeConf* = object nodekey* {. desc: "P2P node private key as hex", defaultValueDesc: "random", name: "nodekey" - .}: Option[crypto.PrivateKey] + .}: Opt[crypto.PrivateKey] store* {. desc: "Flag whether to start store protocol", defaultValue: true, name: "store" diff --git a/apps/chat2mix/chat2mix.nim b/apps/chat2mix/chat2mix.nim index f5d864a8f..4d2d08837 100644 --- a/apps/chat2mix/chat2mix.nim +++ b/apps/chat2mix/chat2mix.nim @@ -6,7 +6,7 @@ when not (compileOption("threads")): {.push raises: [].} -import std/[strformat, strutils, times, options, random, sequtils] +import std/[strformat, strutils, times, random, sequtils, sets] import confutils, chronicles, @@ -31,9 +31,8 @@ import protocols/kademlia/types, protocols/service_discovery/types as sd_types, nameresolving/dnsresolver, - protocols/mix/curve25519, - protocols/mix/mix_protocol, ] # define DNS resolution +import libp2p_mix/[curve25519, mix_protocol] import logos_delivery/waku/[ waku_core, @@ -216,9 +215,9 @@ proc publish(c: Chat, line: string) {.async.} = ( waitFor c.node.lightpushPublish( - some(c.conf.getPubsubTopic(c.node, c.contentTopic)), + Opt.some(c.conf.getPubsubTopic(c.node, c.contentTopic)), message, - none(RemotePeerInfo), + Opt.none(RemotePeerInfo), true, ) ).isOkOr: @@ -312,7 +311,7 @@ proc readInput(wfd: AsyncFD) {.thread, raises: [Defect, CatchableError].} = var alreadyUsedServicePeers {.threadvar.}: seq[RemotePeerInfo] proc selectRandomServicePeer*( - pm: PeerManager, actualPeer: Option[RemotePeerInfo], codec: string + pm: PeerManager, actualPeer: Opt[RemotePeerInfo], codec: string ): Result[RemotePeerInfo, void] = if actualPeer.isSome(): alreadyUsedServicePeers.add(actualPeer.get()) @@ -355,7 +354,7 @@ proc maintainSubscription( let subscribeErr = ( await wakuNode.filterSubscribe( - some(filterPubsubTopic), filterContentTopic, actualFilterPeer + Opt.some(filterPubsubTopic), filterContentTopic, actualFilterPeer ) ).errorOr: await sleepAsync(SubscriptionMaintenance) @@ -377,7 +376,7 @@ proc maintainSubscription( elif not preventPeerSwitch: # try again with new peer without delay let actualFilterPeer = selectRandomServicePeer( - wakuNode.peerManager, some(actualFilterPeer), WakuFilterSubscribeCodec + wakuNode.peerManager, Opt.some(actualFilterPeer), WakuFilterSubscribeCodec ).valueOr: error "Failed to find new service peer. Exiting." noFailedServiceNodeSwitches += 1 @@ -463,10 +462,9 @@ proc processInput(rfd: AsyncFD, rng: crypto.Rng) {.async.} = if conf.kadBootstrapNodes.len > 0: var kadBootstrapPeers: seq[(PeerId, seq[MultiAddress])] for nodeStr in conf.kadBootstrapNodes: - let (peerId, ma) = block: - parseFullAddress(nodeStr).isOkOr: - error "Failed to parse kademlia bootstrap node", node = nodeStr, error - continue + let (peerId, ma) = parseFullAddress(nodeStr).valueOr: + error "Failed to parse kademlia bootstrap node", node = nodeStr, error = error + continue kadBootstrapPeers.add((peerId, @[ma])) @@ -474,7 +472,7 @@ proc processInput(rfd: AsyncFD, rng: crypto.Rng) {.async.} = node.mountKademlia( KademliaDiscoveryConf( bootstrapNodes: kadBootstrapPeers, - servicesToDiscover: @[MixProtocolID], + servicesToDiscover: toHashSet([MixProtocolID]), randomLookupInterval: chronos.seconds(60), serviceLookupInterval: chronos.seconds(60), kadDhtConfig: KadDHTConfig.new(), @@ -511,25 +509,25 @@ proc processInput(rfd: AsyncFD, rng: crypto.Rng) {.async.} = conf: conf, ) - var dnsDiscoveryUrl = none(string) + var dnsDiscoveryUrl = Opt.none(string) if conf.fleet != Fleet.none: # Use DNS discovery to connect to selected fleet echo "Connecting to " & $conf.fleet & " fleet using DNS discovery..." if conf.fleet == Fleet.test: - dnsDiscoveryUrl = some( + dnsDiscoveryUrl = Opt.some( "enrtree://AOGYWMBYOUIMOENHXCHILPKY3ZRFEULMFI4DOM442QSZ73TT2A7VI@test.waku.nodes.status.im" ) else: # Connect to sandbox by default - dnsDiscoveryUrl = some( + dnsDiscoveryUrl = Opt.some( "enrtree://AIRVQ5DDA4FFWLRBCHJWUWOO6X6S4ZTZ5B667LQ6AJU6PEYDLRD5O@sandbox.waku.nodes.status.im" ) elif conf.dnsDiscoveryUrl != "": # No pre-selected fleet. Discover nodes via DNS using user config info "Discovering nodes using Waku DNS discovery", url = conf.dnsDiscoveryUrl - dnsDiscoveryUrl = some(conf.dnsDiscoveryUrl) + dnsDiscoveryUrl = Opt.some(conf.dnsDiscoveryUrl) var discoveredNodes: seq[RemotePeerInfo] @@ -565,17 +563,17 @@ proc processInput(rfd: AsyncFD, rng: crypto.Rng) {.async.} = if (conf.storenode != "") or (conf.store == true): await node.mountStore() - var storenode: Option[RemotePeerInfo] + var storenode: Opt[RemotePeerInfo] if conf.storenode != "": let peerInfo = parsePeerInfo(conf.storenode) if peerInfo.isOk(): - storenode = some(peerInfo.value) + storenode = Opt.some(peerInfo.value) else: error "Incorrect conf.storenode", error = peerInfo.error elif discoveredNodes.len > 0: echo "Store enabled, but no store nodes configured. Choosing one at random from discovered peers" - storenode = some(discoveredNodes[rand(0 .. len(discoveredNodes) - 1)]) + storenode = Opt.some(discoveredNodes[rand(0 .. len(discoveredNodes) - 1)]) if storenode.isSome(): # We have a viable storenode. Let's query it for historical messages. @@ -620,7 +618,7 @@ proc processInput(rfd: AsyncFD, rng: crypto.Rng) {.async.} = if servicePeerInfo == nil or $servicePeerInfo.peerId == "": # Assuming that service node supports all services servicePeerInfo = selectRandomServicePeer( - node.peerManager, none(RemotePeerInfo), WakuLightpushCodec + node.peerManager, Opt.none(RemotePeerInfo), WakuLightpushCodec ).valueOr: error "Couldn't find any service peer" quit(QuitFailure) diff --git a/apps/chat2mix/config_chat2mix.nim b/apps/chat2mix/config_chat2mix.nim index f77a729f4..ed7d5c045 100644 --- a/apps/chat2mix/config_chat2mix.nim +++ b/apps/chat2mix/config_chat2mix.nim @@ -1,4 +1,4 @@ -import chronicles, chronos, std/strutils, regex +import results, chronicles, chronos, std/strutils, regex import eth/keys, @@ -32,7 +32,7 @@ type .}: LogLevel nodekey* {.desc: "P2P node private key as 64 char hex string.", name: "nodekey".}: - Option[crypto.PrivateKey] + Opt[crypto.PrivateKey] listenAddress* {. defaultValue: defaultListenAddress(config), @@ -287,9 +287,9 @@ proc parseCmdArg*(T: type Port, p: string): T = proc completeCmdArg*(T: type Port, val: string): seq[string] = return @[] -proc parseCmdArg*(T: type Option[uint], p: string): T = +proc parseCmdArg*(T: type Opt[uint], p: string): T = try: - some(parseUint(p)) + Opt.some(parseUint(p)) except CatchableError: raise newException(ValueError, "Invalid unsigned integer") diff --git a/apps/liteprotocoltester/diagnose_connections.nim b/apps/liteprotocoltester/diagnose_connections.nim index 1b5b79b4b..77eec268e 100644 --- a/apps/liteprotocoltester/diagnose_connections.nim +++ b/apps/liteprotocoltester/diagnose_connections.nim @@ -4,7 +4,7 @@ else: {.push raises: [].} import - std/[options, net, strformat], + std/[net, strformat], chronicles, chronos, metrics, diff --git a/apps/liteprotocoltester/legacy_publisher.nim b/apps/liteprotocoltester/legacy_publisher.nim index c2b729b8b..d950faee2 100644 --- a/apps/liteprotocoltester/legacy_publisher.nim +++ b/apps/liteprotocoltester/legacy_publisher.nim @@ -1,4 +1,4 @@ -import chronos, results, options +import chronos, results import logos_delivery/waku/[waku_node, waku_core] import publisher_base @@ -18,7 +18,7 @@ method send*( ): Future[Result[void, string]] {.async.} = # when error it must return original error desc due the text is used for distinction between error types in metrics. discard ( - await self.wakuNode.legacyLightpushPublish(some(topic), message, servicePeer) + await self.wakuNode.legacyLightpushPublish(Opt.some(topic), message, servicePeer) ).valueOr: return err(error) return ok() diff --git a/apps/liteprotocoltester/liteprotocoltester.nim b/apps/liteprotocoltester/liteprotocoltester.nim index 124d09173..b1e7bab1e 100644 --- a/apps/liteprotocoltester/liteprotocoltester.nim +++ b/apps/liteprotocoltester/liteprotocoltester.nim @@ -1,7 +1,8 @@ {.push raises: [].} import - std/[options, strutils, os, sequtils, net], + results, + std/[strutils, os, sequtils, net], chronicles, chronos, metrics, @@ -95,7 +96,7 @@ when isMainModule: wakuNodeConf.shards = @[conf.shard] wakuNodeConf.contentTopics = conf.contentTopics - wakuNodeConf.clusterId = some(conf.clusterId) + wakuNodeConf.clusterId = Opt.some(conf.clusterId) ## TODO: Depending on the tester needs we might extend here with shards, clusterId, etc... wakuNodeConf.metricsServer = true @@ -190,7 +191,7 @@ when isMainModule: quit(QuitFailure) serviceNodePeerInfo = selectRandomServicePeer( - waku.node.peerManager, none(RemotePeerInfo), codec + waku.node.peerManager, Opt.none(RemotePeerInfo), codec ).valueOr: error "Service node selection failed" quit(QuitFailure) diff --git a/apps/liteprotocoltester/publisher.nim b/apps/liteprotocoltester/publisher.nim index cbd36ce68..4bfd6aed3 100644 --- a/apps/liteprotocoltester/publisher.nim +++ b/apps/liteprotocoltester/publisher.nim @@ -188,7 +188,7 @@ proc publishMessages( if not preventPeerSwitch and noFailedPush > maxFailedPush: info "Max push failure limit reached, Try switching peer." actualServicePeer = selectRandomServicePeer( - wakuNode.peerManager, some(actualServicePeer), WakuLightPushCodec + wakuNode.peerManager, Opt.some(actualServicePeer), WakuLightPushCodec ).valueOr: error "Failed to find new service peer. Exiting." noFailedServiceNodeSwitches += 1 diff --git a/apps/liteprotocoltester/receiver.nim b/apps/liteprotocoltester/receiver.nim index 457626af6..e9151b101 100644 --- a/apps/liteprotocoltester/receiver.nim +++ b/apps/liteprotocoltester/receiver.nim @@ -2,7 +2,6 @@ ## subscribe to messages without relay import - std/options, system/ansi_c, chronicles, chronos, @@ -74,7 +73,7 @@ proc maintainSubscription( let subscribeErr = ( await wakuNode.filterSubscribe( - some(filterPubsubTopic), filterContentTopic, actualFilterPeer + Opt.some(filterPubsubTopic), filterContentTopic, actualFilterPeer ) ).errorOr: await sleepAsync(SubscriptionMaintenanceMs) @@ -99,7 +98,7 @@ proc maintainSubscription( elif not preventPeerSwitch: # try again with new peer without delay actualFilterPeer = selectRandomServicePeer( - wakuNode.peerManager, some(actualFilterPeer), WakuFilterSubscribeCodec + wakuNode.peerManager, Opt.some(actualFilterPeer), WakuFilterSubscribeCodec ).valueOr: error "Failed to find new service peer. Exiting." noFailedServiceNodeSwitches += 1 diff --git a/apps/liteprotocoltester/service_peer_management.nim b/apps/liteprotocoltester/service_peer_management.nim index 6198bc448..aa7041116 100644 --- a/apps/liteprotocoltester/service_peer_management.nim +++ b/apps/liteprotocoltester/service_peer_management.nim @@ -1,7 +1,8 @@ {.push raises: [].} import - std/[options, net, sysrand, random, strformat, strutils, sequtils], + results, + std/[net, sysrand, random, strformat, strutils, sequtils], chronicles, chronos, metrics, @@ -53,7 +54,7 @@ proc translateToRemotePeerInfo*(peerAddress: string): Result[RemotePeerInfo, voi ## Note: This is kept for future use. proc selectRandomCapablePeer*( pm: PeerManager, codec: string, pubsubTopic: PubsubTopic -): Future[Option[RemotePeerInfo]] {.async.} = +): Future[Opt[RemotePeerInfo]] {.async.} = var cap = Capabilities.Filter if codec.contains("lightpush"): cap = Capabilities.Lightpush @@ -65,9 +66,9 @@ proc selectRandomCapablePeer*( trace "Found supportive peers count", count = supportivePeers.len() trace "Found supportive peers", supportivePeers = $supportivePeers if supportivePeers.len == 0: - return none(RemotePeerInfo) + return Opt.none(RemotePeerInfo) - var found = none(RemotePeerInfo) + var found = Opt.none(RemotePeerInfo) while found.isNone() and supportivePeers.len > 0: let rndPeerIndex = rand(0 .. supportivePeers.len - 1) let randomPeer = supportivePeers[rndPeerIndex] @@ -80,7 +81,7 @@ proc selectRandomCapablePeer*( let connOpt = pm.dialPeer(randomPeer, codec) if (await connOpt.withTimeout(10.seconds)): if connOpt.value().isSome(): - found = some(randomPeer) + found = Opt.some(randomPeer) info "Dialing successful", peer = constructMultiaddrStr(randomPeer), codec = codec else: @@ -94,7 +95,7 @@ proc selectRandomCapablePeer*( # Debugging PX gathered peers connectivity proc tryCallAllPxPeers*( pm: PeerManager, codec: string, pubsubTopic: PubsubTopic -): Future[Option[seq[RemotePeerInfo]]] {.async.} = +): Future[Opt[seq[RemotePeerInfo]]] {.async.} = var capability = Capabilities.Filter if codec.contains("lightpush"): capability = Capabilities.Lightpush @@ -107,7 +108,7 @@ proc tryCallAllPxPeers*( info "Found supportive peers count", count = supportivePeers.len() info "Found supportive peers", supportivePeers = $supportivePeers if supportivePeers.len == 0: - return none(seq[RemotePeerInfo]) + return Opt.none(seq[RemotePeerInfo]) var okPeers: seq[RemotePeerInfo] = @[] @@ -152,7 +153,7 @@ proc tryCallAllPxPeers*( echo "PX returned peers found callable for " & codec & " / " & $capability & ":\n" echo okPeersStr - return some(okPeers) + return Opt.some(okPeers) proc pxLookupServiceNode*( node: WakuNode, conf: LiteProtocolTesterConf @@ -168,7 +169,7 @@ proc pxLookupServiceNode*( node.peerManager.addServicePeer(peerExchangeNode, WakuPeerExchangeCodec) try: - await node.mountPeerExchange(some(conf.clusterId)) + await node.mountPeerExchange(Opt.some(conf.clusterId)) except CatchableError: error "failed to mount waku peer-exchange protocol", error = getCurrentExceptionMsg() @@ -207,7 +208,7 @@ var alreadyUsedServicePeers {.threadvar.}: seq[RemotePeerInfo] ## Select service peers by codec from peer store randomly. proc selectRandomServicePeer*( - pm: PeerManager, actualPeer: Option[RemotePeerInfo], codec: string + pm: PeerManager, actualPeer: Opt[RemotePeerInfo], codec: string ): Result[RemotePeerInfo, void] = if actualPeer.isSome(): alreadyUsedServicePeers.add(actualPeer.get()) diff --git a/apps/liteprotocoltester/statistics.nim b/apps/liteprotocoltester/statistics.nim index 7feebd4cf..0a3a975d7 100644 --- a/apps/liteprotocoltester/statistics.nim +++ b/apps/liteprotocoltester/statistics.nim @@ -1,7 +1,7 @@ {.push raises: [].} import - std/[sets, tables, sequtils, options, strformat], + std/[sets, tables, sequtils, strformat], chronos/timer as chtimer, chronicles, chronos, @@ -123,10 +123,10 @@ proc addMessage*( lpt_receiver_sender_peer_count.set(value = self.len) -proc lastMessageArrivedAt*(self: Statistics): Option[Moment] = +proc lastMessageArrivedAt*(self: Statistics): Opt[Moment] = if self.receivedMessages > 0: - return some(self.helper.prevArrivedAt) - return none(Moment) + return Opt.some(self.helper.prevArrivedAt) + return Opt.none(Moment) proc lossCount*(self: Statistics): uint32 = self.helper.maxIndex - self.receivedMessages @@ -271,7 +271,7 @@ proc jsonStats*(self: PerPeerStatistics): string = "{\"result:\": \"Error while generating json stats: " & getCurrentExceptionMsg() & "\"}" -proc lastMessageArrivedAt*(self: PerPeerStatistics): Option[Moment] = +proc lastMessageArrivedAt*(self: PerPeerStatistics): Opt[Moment] = var lastArrivedAt = Moment.init(0, Millisecond) for stat in self.values: let lastMsgFromPeerAt = stat.lastMessageArrivedAt().valueOr: @@ -281,9 +281,9 @@ proc lastMessageArrivedAt*(self: PerPeerStatistics): Option[Moment] = lastArrivedAt = lastMsgFromPeerAt if lastArrivedAt == Moment.init(0, Millisecond): - return none(Moment) + return Opt.none(Moment) - return some(lastArrivedAt) + return Opt.some(lastArrivedAt) proc checkIfAllMessagesReceived*( self: PerPeerStatistics, maxWaitForLastMessage: Duration diff --git a/apps/liteprotocoltester/tester_config.nim b/apps/liteprotocoltester/tester_config.nim index 79fc6bf1d..2150d1188 100644 --- a/apps/liteprotocoltester/tester_config.nim +++ b/apps/liteprotocoltester/tester_config.nim @@ -37,7 +37,7 @@ type LiteProtocolTesterConf* = object desc: "Loads configuration from a TOML file (cmd-line parameters take precedence) for the light waku node", name: "config-file" - .}: Option[InputFile] + .}: Opt[InputFile] ## Log configuration logLevel* {. diff --git a/apps/liteprotocoltester/tester_message.nim b/apps/liteprotocoltester/tester_message.nim index 1a169db04..70eb65147 100644 --- a/apps/liteprotocoltester/tester_message.nim +++ b/apps/liteprotocoltester/tester_message.nim @@ -1,9 +1,10 @@ {.push raises: [].} import + results, chronicles, json_serialization, - json_serialization/std/options, + json_serialization/pkg/results, json_serialization/lexer import logos_delivery/waku/rest_api/endpoint/serdes @@ -34,13 +35,13 @@ proc readValue*( reader: var JsonReader[RestJson], value: var ProtocolTesterMessage ) {.gcsafe, raises: [SerializationError, IOError].} = var - sender: Option[string] - index: Option[uint32] - count: Option[uint32] - startedAt: Option[int64] - sinceStart: Option[int64] - sincePrev: Option[int64] - size: Option[uint64] + sender: Opt[string] + index: Opt[uint32] + count: Opt[uint32] + startedAt: Opt[int64] + sinceStart: Opt[int64] + sincePrev: Opt[int64] + size: Opt[uint64] for fieldName in readObjectFields(reader): case fieldName @@ -49,43 +50,43 @@ proc readValue*( reader.raiseUnexpectedField( "Multiple `sender` fields found", "ProtocolTesterMessage" ) - sender = some(reader.readValue(string)) + sender = Opt.some(reader.readValue(string)) of "index": if index.isSome(): reader.raiseUnexpectedField( "Multiple `index` fields found", "ProtocolTesterMessage" ) - index = some(reader.readValue(uint32)) + index = Opt.some(reader.readValue(uint32)) of "count": if count.isSome(): reader.raiseUnexpectedField( "Multiple `count` fields found", "ProtocolTesterMessage" ) - count = some(reader.readValue(uint32)) + count = Opt.some(reader.readValue(uint32)) of "startedAt": if startedAt.isSome(): reader.raiseUnexpectedField( "Multiple `startedAt` fields found", "ProtocolTesterMessage" ) - startedAt = some(reader.readValue(int64)) + startedAt = Opt.some(reader.readValue(int64)) of "sinceStart": if sinceStart.isSome(): reader.raiseUnexpectedField( "Multiple `sinceStart` fields found", "ProtocolTesterMessage" ) - sinceStart = some(reader.readValue(int64)) + sinceStart = Opt.some(reader.readValue(int64)) of "sincePrev": if sincePrev.isSome(): reader.raiseUnexpectedField( "Multiple `sincePrev` fields found", "ProtocolTesterMessage" ) - sincePrev = some(reader.readValue(int64)) + sincePrev = Opt.some(reader.readValue(int64)) of "size": if size.isSome(): reader.raiseUnexpectedField( "Multiple `size` fields found", "ProtocolTesterMessage" ) - size = some(reader.readValue(uint64)) + size = Opt.some(reader.readValue(uint64)) else: unrecognizedFieldWarning(value) diff --git a/apps/liteprotocoltester/v3_publisher.nim b/apps/liteprotocoltester/v3_publisher.nim index bdfea75ec..db9f957f1 100644 --- a/apps/liteprotocoltester/v3_publisher.nim +++ b/apps/liteprotocoltester/v3_publisher.nim @@ -1,4 +1,4 @@ -import results, options, chronos +import results, chronos import logos_delivery/waku/[waku_node, waku_core, waku_lightpush, waku_lightpush/common] import publisher_base @@ -18,10 +18,12 @@ method send*( ): Future[Result[void, string]] {.async.} = # when error it must return original error desc due the text is used for distinction between error types in metrics. discard ( - await self.wakuNode.lightpushPublish(some(topic), message, some(servicePeer)) + await self.wakuNode.lightpushPublish( + Opt.some(topic), message, Opt.some(servicePeer) + ) ).valueOr: if error.code == LightPushErrorCode.NO_PEERS_TO_RELAY and - error.desc != some("No peers for topic, skipping publish"): + error.desc != Opt.some("No peers for topic, skipping publish"): # TODO: We need better separation of errors happening on the client side or the server side.- return err("dial_failure") else: diff --git a/apps/networkmonitor/networkmonitor.nim b/apps/networkmonitor/networkmonitor.nim index a23c778ef..7bdf41469 100644 --- a/apps/networkmonitor/networkmonitor.nim +++ b/apps/networkmonitor/networkmonitor.nim @@ -422,7 +422,7 @@ proc initAndStartApp( let # some hardcoded parameters - rng = keys.newRng() + rng = crypto.newRng() key = crypto.PrivateKey.random(Secp256k1, rng)[] nodeTcpPort = Port(60000) nodeUdpPort = Port(9000) @@ -433,7 +433,9 @@ proc initAndStartApp( var builder = EnrBuilder.init(key) builder.withIpAddressAndPorts( - ipAddr = some(extIp), tcpPort = some(nodeTcpPort), udpPort = some(nodeUdpPort) + ipAddr = Opt.some(extIp), + tcpPort = Opt.some(nodeTcpPort), + udpPort = Opt.some(nodeUdpPort), ) builder.withWakuCapabilities(flags) @@ -450,7 +452,7 @@ proc initAndStartApp( nodeBuilder.withNodeKey(key) nodeBuilder.withRecord(record) - nodeBuilder.withSwitchConfiguration(maxConnections = some(MaxConnectedPeers)) + nodeBuilder.withSwitchConfiguration(maxConnections = Opt.some(MaxConnectedPeers)) nodeBuilder.withPeerManagerConfig( maxConnections = MaxConnectedPeers, @@ -473,7 +475,7 @@ proc initAndStartApp( # discv5 let discv5Conf = WakuDiscoveryV5Config( - discv5Config: none(DiscoveryConfig), + discv5Config: Opt.none(DiscoveryConfig), address: bindIp, port: nodeUdpPort, privateKey: keys.PrivateKey(key.skkey), @@ -481,7 +483,7 @@ proc initAndStartApp( autoupdateRecord: false, ) - let wakuDiscv5 = WakuDiscoveryV5.new(node.rng, discv5Conf, some(record)) + let wakuDiscv5 = WakuDiscoveryV5.new(node.rng, discv5Conf, Opt.some(record)) try: wakuDiscv5.protocol.open() @@ -610,11 +612,11 @@ when isMainModule: if conf.rlnRelay and conf.rlnRelayEthContractAddress != "": let rlnConf = WakuRlnConfig( dynamic: conf.rlnRelayDynamic, - credIndex: some(uint(0)), + credIndex: Opt.some(uint(0)), ethContractAddress: conf.rlnRelayEthContractAddress, ethClientUrls: conf.ethClientUrls.mapIt(string(it)), epochSizeSec: conf.rlnEpochSizeSec, - creds: none(RlnCreds), + creds: Opt.none(RlnCreds), onFatalErrorAction: onFatalErrorAction, ) diff --git a/apps/wakucanary/wakucanary.nim b/apps/wakucanary/wakucanary.nim index 44a3548d6..2ada1ac26 100644 --- a/apps/wakucanary/wakucanary.nim +++ b/apps/wakucanary/wakucanary.nim @@ -1,4 +1,5 @@ import + results, std/[strutils, sequtils, tables, strformat], confutils, chronos, @@ -215,7 +216,7 @@ proc main(rng: Rng): Future[int] {.async.} = let netConfig = NetConfig.init( bindIp = bindIp, bindPort = nodeTcpPort, - wsBindPort = some(wsBindPort), + wsBindPort = Opt.some(wsBindPort), wsEnabled = isWs, wssEnabled = isWss, ) @@ -244,7 +245,9 @@ proc main(rng: Rng): Future[int] {.async.} = builder.withRecord(record) builder.withNetworkConfiguration(netConfig.tryGet()) builder.withSwitchConfiguration( - secureKey = some(keyPath), secureCert = some(certPath), nameResolver = resolver + secureKey = Opt.some(keyPath), + secureCert = Opt.some(certPath), + nameResolver = resolver, ) let node = builder.build().tryGet() diff --git a/apps/wakunode2/wakunode2.nim b/apps/wakunode2/wakunode2.nim index a75b472ec..914e8e3ad 100644 --- a/apps/wakunode2/wakunode2.nim +++ b/apps/wakunode2/wakunode2.nim @@ -1,7 +1,7 @@ {.push raises: [].} import - std/[options, strutils, sequtils, net], + std/[strutils, sequtils, net], chronicles, chronos, metrics, diff --git a/examples/api_example/api_example.nim b/examples/api_example/api_example.nim index 8c8759191..024809032 100644 --- a/examples/api_example/api_example.nim +++ b/examples/api_example/api_example.nim @@ -1,4 +1,3 @@ -import std/options import chronos, results, confutils, confutils/defs import logos_delivery @@ -67,11 +66,9 @@ when isMainModule: if args.ethRpcEndpoint == "": # Create a basic configuration for the Waku node # No RLN as we don't have an ETH RPC Endpoint - conf.mode = Core conf.preset = "logos.dev" else: # Connect to TWN, use ETH RPC Endpoint for RLN - conf.mode = Core conf.preset = "twn" conf.ethClientUrls = @[EthRpcUrl(args.ethRpcEndpoint)] diff --git a/examples/filter_subscriber.nim b/examples/filter_subscriber.nim index 5fa47d976..e5555f3c0 100644 --- a/examples/filter_subscriber.nim +++ b/examples/filter_subscriber.nim @@ -43,13 +43,13 @@ proc messagePushHandler( contentTopic = message.contentTopic, timestamp = message.timestamp -proc setupAndSubscribe(rng: ref HmacDrbgContext) {.async.} = +proc setupAndSubscribe(rng: crypto.Rng) {.async.} = # use notice to filter all waku messaging setupLog(logging.LogLevel.NOTICE, logging.LogFormat.TEXT) notice "starting subscriber", wakuPort = wakuPort let - nodeKey = crypto.PrivateKey.random(Secp256k1, rng[])[] + nodeKey = crypto.PrivateKey.random(Secp256k1, rng)[] ip = parseIpAddress("0.0.0.0") flags = CapabilitiesBitfield.init(relay = true) diff --git a/examples/lightpush_mix/lightpush_publisher_mix.nim b/examples/lightpush_mix/lightpush_publisher_mix.nim index 573d6549e..133f80881 100644 --- a/examples/lightpush_mix/lightpush_publisher_mix.nim +++ b/examples/lightpush_mix/lightpush_publisher_mix.nim @@ -48,13 +48,13 @@ proc splitPeerIdAndAddr(maddr: string): (string, string) = peerId = parts[1] return (address, peerId) -proc setupAndPublish(rng: ref HmacDrbgContext, conf: LightPushMixConf) {.async.} = +proc setupAndPublish(rng: crypto.Rng, conf: LightPushMixConf) {.async.} = # use notice to filter all waku messaging setupLog(logging.LogLevel.DEBUG, logging.LogFormat.TEXT) notice "starting publisher", wakuPort = conf.port let - nodeKey = crypto.PrivateKey.random(Secp256k1, rng[]).get() + nodeKey = crypto.PrivateKey.random(Secp256k1, rng).get() ip = parseIpAddress("0.0.0.0") flags = CapabilitiesBitfield.init(relay = true) @@ -84,7 +84,7 @@ proc setupAndPublish(rng: ref HmacDrbgContext, conf: LightPushMixConf) {.async.} ) node.mountLightPushClient() try: - await node.mountPeerExchange(some(uint16(clusterId))) + await node.mountPeerExchange(Opt.some(uint16(clusterId))) except CatchableError: error "failed to mount waku peer-exchange protocol", error = getCurrentExceptionMsg() @@ -164,8 +164,9 @@ proc setupAndPublish(rng: ref HmacDrbgContext, conf: LightPushMixConf) {.async.} timestamp: getNowInNanosecondTime(), ) # current timestamp - let res = - await node.wakuLightpushClient.publish(some(LightpushPubsubTopic), message, conn) + let res = await node.wakuLightpushClient.publish( + Opt.some(LightpushPubsubTopic), message, conn + ) let startTime = getNowInNanosecondTime() diff --git a/examples/lightpush_publisher.nim b/examples/lightpush_publisher.nim index fe4134072..c7bf73124 100644 --- a/examples/lightpush_publisher.nim +++ b/examples/lightpush_publisher.nim @@ -35,13 +35,13 @@ const LightpushPubsubTopic = PubsubTopic("/waku/2/rs/1/0") LightpushContentTopic = ContentTopic("/examples/1/light-pubsub-example/proto") -proc setupAndPublish(rng: ref HmacDrbgContext) {.async.} = +proc setupAndPublish(rng: crypto.Rng) {.async.} = # use notice to filter all waku messaging setupLog(logging.LogLevel.NOTICE, logging.LogFormat.TEXT) notice "starting publisher", wakuPort = wakuPort let - nodeKey = crypto.PrivateKey.random(Secp256k1, rng[]).get() + nodeKey = crypto.PrivateKey.random(Secp256k1, rng).get() ip = parseIpAddress("0.0.0.0") flags = CapabilitiesBitfield.init(relay = true) @@ -87,7 +87,7 @@ proc setupAndPublish(rng: ref HmacDrbgContext) {.async.} = quit(QuitFailure) let res = await node.legacyLightpushPublish( - some(LightpushPubsubTopic), message, lightpushPeer + Opt.some(LightpushPubsubTopic), message, lightpushPeer ) if res.isOk: diff --git a/examples/publisher.nim b/examples/publisher.nim index edae12157..81b66e53c 100644 --- a/examples/publisher.nim +++ b/examples/publisher.nim @@ -1,4 +1,5 @@ import + results, std/[tables, times, sequtils], stew/byteutils, chronicles, @@ -37,13 +38,13 @@ const bootstrapNode = const wakuPort = 60000 const discv5Port = 9000 -proc setupAndPublish(rng: ref HmacDrbgContext) {.async.} = +proc setupAndPublish(rng: crypto.Rng) {.async.} = # use notice to filter all waku messaging setupLog(logging.LogLevel.NOTICE, logging.LogFormat.TEXT) notice "starting publisher", wakuPort = wakuPort, discv5Port = discv5Port let - nodeKey = crypto.PrivateKey.random(Secp256k1, rng[]).get() + nodeKey = crypto.PrivateKey.random(Secp256k1, rng).get() ip = parseIpAddress("0.0.0.0") flags = CapabilitiesBitfield.init(relay = true) @@ -63,7 +64,7 @@ proc setupAndPublish(rng: ref HmacDrbgContext) {.async.} = discard bootstrapNodeEnr.fromURI(bootstrapNode) let discv5Conf = WakuDiscoveryV5Config( - discv5Config: none(DiscoveryConfig), + discv5Config: Opt.none(DiscoveryConfig), address: ip, port: Port(discv5Port), privateKey: keys.PrivateKey(nodeKey.skkey), @@ -75,8 +76,8 @@ proc setupAndPublish(rng: ref HmacDrbgContext) {.async.} = let wakuDiscv5 = WakuDiscoveryV5.new( node.rng, discv5Conf, - some(node.enr), - some(node.peerManager), + Opt.some(node.enr), + Opt.some(node.peerManager), node.topicSubscriptionQueue, ) @@ -119,7 +120,7 @@ proc setupAndPublish(rng: ref HmacDrbgContext) {.async.} = timestamp: now(), ) # current timestamp - let res = await node.publish(some(pubSubTopic), message) + let res = await node.publish(Opt.some(pubSubTopic), message) if res.isOk: notice "published message", diff --git a/examples/subscriber.nim b/examples/subscriber.nim index 541d3ddec..febbd1a65 100644 --- a/examples/subscriber.nim +++ b/examples/subscriber.nim @@ -1,4 +1,5 @@ import + results, std/[tables, sequtils], stew/byteutils, chronicles, @@ -35,13 +36,13 @@ const bootstrapNode = const wakuPort = 50000 const discv5Port = 8000 -proc setupAndSubscribe(rng: ref HmacDrbgContext) {.async.} = +proc setupAndSubscribe(rng: crypto.Rng) {.async.} = # use notice to filter all waku messaging setupLog(logging.LogLevel.NOTICE, logging.LogFormat.TEXT) notice "starting subscriber", wakuPort = wakuPort, discv5Port = discv5Port let - nodeKey = crypto.PrivateKey.random(Secp256k1, rng[])[] + nodeKey = crypto.PrivateKey.random(Secp256k1, rng)[] ip = parseIpAddress("0.0.0.0") flags = CapabilitiesBitfield.init(relay = true) @@ -61,7 +62,7 @@ proc setupAndSubscribe(rng: ref HmacDrbgContext) {.async.} = discard bootstrapNodeEnr.fromURI(bootstrapNode) let discv5Conf = WakuDiscoveryV5Config( - discv5Config: none(DiscoveryConfig), + discv5Config: Opt.none(DiscoveryConfig), address: ip, port: Port(discv5Port), privateKey: keys.PrivateKey(nodeKey.skkey), @@ -73,8 +74,8 @@ proc setupAndSubscribe(rng: ref HmacDrbgContext) {.async.} = let wakuDiscv5 = WakuDiscoveryV5.new( node.rng, discv5Conf, - some(node.enr), - some(node.peerManager), + Opt.some(node.enr), + Opt.some(node.peerManager), node.topicSubscriptionQueue, ) diff --git a/examples/wakustealthcommitments/node_spec.nim b/examples/wakustealthcommitments/node_spec.nim index e8e0a2062..5cc2124e4 100644 --- a/examples/wakustealthcommitments/node_spec.nim +++ b/examples/wakustealthcommitments/node_spec.nim @@ -3,15 +3,16 @@ import tools/confutils/cli_args import logos_delivery/waku/[common/logging, waku, factory/networks_config] import - std/[options, strutils, os, sequtils], + results, + std/[strutils, os, sequtils], chronicles, chronos, metrics, libp2p/crypto/crypto export - networks_config, waku, logging, options, strutils, os, sequtils, stewNet, chronicles, - chronos, metrics, crypto + networks_config, waku, logging, strutils, os, sequtils, stewNet, chronicles, chronos, + metrics, crypto proc setup*(): Waku = const versionString = "version / git commit hash: " & waku.git_version @@ -29,18 +30,18 @@ proc setup*(): Waku = # Override configuration conf.maxMessageSize = twnNetworkConf.maxMessageSize - conf.clusterId = some(twnNetworkConf.clusterId) + conf.clusterId = Opt.some(twnNetworkConf.clusterId) conf.rlnRelayEthContractAddress = twnNetworkConf.rlnRelayEthContractAddress - conf.rlnRelayDynamic = some(twnNetworkConf.rlnRelayDynamic) - conf.discv5Discovery = some(twnNetworkConf.discv5Discovery) + conf.rlnRelayDynamic = Opt.some(twnNetworkConf.rlnRelayDynamic) + conf.discv5Discovery = Opt.some(twnNetworkConf.discv5Discovery) conf.discv5BootstrapNodes = conf.discv5BootstrapNodes & twnNetworkConf.discv5BootstrapNodes - conf.rlnEpochSizeSec = some(twnNetworkConf.rlnEpochSizeSec) - conf.rlnRelayUserMessageLimit = some(twnNetworkConf.rlnRelayUserMessageLimit) + conf.rlnEpochSizeSec = Opt.some(twnNetworkConf.rlnEpochSizeSec) + conf.rlnRelayUserMessageLimit = Opt.some(twnNetworkConf.rlnRelayUserMessageLimit) # Only set rlnRelay to true if relay is configured if conf.relay: - conf.rlnRelay = some(twnNetworkConf.rlnRelay) + conf.rlnRelay = Opt.some(twnNetworkConf.rlnRelay) info "Starting node" var waku = (waitFor Waku.new(conf)).valueOr: diff --git a/examples/wakustealthcommitments/stealth_commitment_protocol.nim b/examples/wakustealthcommitments/stealth_commitment_protocol.nim index 097994126..f14ed7043 100644 --- a/examples/wakustealthcommitments/stealth_commitment_protocol.nim +++ b/examples/wakustealthcommitments/stealth_commitment_protocol.nim @@ -51,7 +51,7 @@ proc sendThruWaku*( ).valueOr: return err("could not append rate limit proof to the message: " & error) - (await self.waku.node.publish(some(DefaultPubsubTopic), message)).isOkOr: + (await self.waku.node.publish(Opt.some(DefaultPubsubTopic), message)).isOkOr: return err("failed to publish message: " & $error) info "rate limit proof is appended to the message" @@ -182,7 +182,7 @@ proc new*( except CatchableError: error "could not handle SCP message: ", err = getCurrentExceptionMsg() - waku.node.subscribe((kind: PubsubSub, topic: DefaultPubsubTopic), some(handler)).isOkOr: + waku.node.subscribe((kind: PubsubSub, topic: DefaultPubsubTopic), Opt.some(handler)).isOkOr: error "could not subscribe to pubsub topic: ", err = $error return err("could not subscribe to pubsub topic: " & $error) return ok(SCP) diff --git a/examples/wakustealthcommitments/wire_spec.nim b/examples/wakustealthcommitments/wire_spec.nim index cd32d24a8..fdaa4d8f3 100644 --- a/examples/wakustealthcommitments/wire_spec.nim +++ b/examples/wakustealthcommitments/wire_spec.nim @@ -1,22 +1,20 @@ -import std/[times, options] +import std/times import confutils, chronicles, chronos, results import logos_delivery/waku/[waku_core, common/protobuf] import libp2p/protobuf/minprotobuf -export - times, options, confutils, chronicles, chronos, results, waku_core, protobuf, - minprotobuf +export times, confutils, chronicles, chronos, results, waku_core, protobuf, minprotobuf type SerializedKey* = seq[byte] type WakuStealthCommitmentMsg* = object request*: bool - spendingPubKey*: Option[SerializedKey] - viewingPubKey*: Option[SerializedKey] - ephemeralPubKey*: Option[SerializedKey] - stealthCommitment*: Option[SerializedKey] - viewTag*: Option[uint64] + spendingPubKey*: Opt[SerializedKey] + viewingPubKey*: Opt[SerializedKey] + ephemeralPubKey*: Opt[SerializedKey] + stealthCommitment*: Opt[SerializedKey] + viewTag*: Opt[uint64] proc decode*(T: type WakuStealthCommitmentMsg, buffer: seq[byte]): ProtoResult[T] = var msg = WakuStealthCommitmentMsg() @@ -29,20 +27,20 @@ proc decode*(T: type WakuStealthCommitmentMsg, buffer: seq[byte]): ProtoResult[T discard ?pb.getField(2, spendingPubKey) msg.spendingPubKey = if spendingPubKey.len > 0: - some(spendingPubKey) + Opt.some(spendingPubKey) else: - none(SerializedKey) + Opt.none(SerializedKey) var viewingPubKey = newSeq[byte]() discard ?pb.getField(3, viewingPubKey) msg.viewingPubKey = if viewingPubKey.len > 0: - some(viewingPubKey) + Opt.some(viewingPubKey) else: - none(SerializedKey) + Opt.none(SerializedKey) if msg.spendingPubKey.isSome() and msg.viewingPubKey.isSome(): - msg.stealthCommitment = none(SerializedKey) - msg.viewTag = none(uint64) + msg.stealthCommitment = Opt.none(SerializedKey) + msg.viewTag = Opt.none(uint64) return ok(msg) if msg.spendingPubKey.isSome() and msg.viewingPubKey.isNone(): return err(ProtoError.RequiredFieldMissing) @@ -55,25 +53,25 @@ proc decode*(T: type WakuStealthCommitmentMsg, buffer: seq[byte]): ProtoResult[T discard ?pb.getField(4, stealthCommitment) msg.stealthCommitment = if stealthCommitment.len > 0: - some(stealthCommitment) + Opt.some(stealthCommitment) else: - none(SerializedKey) + Opt.none(SerializedKey) var ephemeralPubKey = newSeq[byte]() discard ?pb.getField(5, ephemeralPubKey) msg.ephemeralPubKey = if ephemeralPubKey.len > 0: - some(ephemeralPubKey) + Opt.some(ephemeralPubKey) else: - none(SerializedKey) + Opt.none(SerializedKey) var viewTag: uint64 discard ?pb.getField(6, viewTag) msg.viewTag = if viewTag != 0: - some(viewTag) + Opt.some(viewTag) else: - none(uint64) + Opt.none(uint64) if msg.stealthCommitment.isNone() and msg.viewTag.isNone() and msg.ephemeralPubKey.isNone(): @@ -86,8 +84,8 @@ proc decode*(T: type WakuStealthCommitmentMsg, buffer: seq[byte]): ProtoResult[T return err(ProtoError.RequiredFieldMissing) if msg.stealthCommitment.isSome() and msg.viewTag.isSome(): - msg.spendingPubKey = none(SerializedKey) - msg.viewingPubKey = none(SerializedKey) + msg.spendingPubKey = Opt.none(SerializedKey) + msg.viewingPubKey = Opt.none(SerializedKey) ok(msg) @@ -118,8 +116,8 @@ proc constructRequest*( ): WakuStealthCommitmentMsg = WakuStealthCommitmentMsg( request: true, - spendingPubKey: some(spendingPubKey), - viewingPubKey: some(viewingPubKey), + spendingPubKey: Opt.some(spendingPubKey), + viewingPubKey: Opt.some(viewingPubKey), ) proc constructResponse*( @@ -127,7 +125,7 @@ proc constructResponse*( ): WakuStealthCommitmentMsg = WakuStealthCommitmentMsg( request: false, - stealthCommitment: some(stealthCommitment), - ephemeralPubKey: some(ephemeralPubKey), - viewTag: some(viewTag), + stealthCommitment: Opt.some(stealthCommitment), + ephemeralPubKey: Opt.some(ephemeralPubKey), + viewTag: Opt.some(viewTag), ) diff --git a/library/kernel_api/protocols/store_api.nim b/library/kernel_api/protocols/store_api.nim index 75d43fee1..3f47fcc66 100644 --- a/library/kernel_api/protocols/store_api.nim +++ b/library/kernel_api/protocols/store_api.nim @@ -1,4 +1,4 @@ -import std/[json, sugar, options] +import std/[json, sugar] import chronos, chronicles, results, ffi import logos_delivery, @@ -24,17 +24,17 @@ func fromJsonNode(jsonContent: JsonNode): Result[StoreQueryRequest, string] = let pubsubTopic = if jsonContent.contains("pubsubTopic"): - some(jsonContent["pubsubTopic"].getStr()) + Opt.some(jsonContent["pubsubTopic"].getStr()) else: - none(string) + Opt.none(string) let paginationCursor = if jsonContent.contains("paginationCursor"): let hash = jsonContent["paginationCursor"].getStr().hexToHash().valueOr: return err("Failed converting paginationCursor hex string to bytes: " & error) - some(hash) + Opt.some(hash) else: - none(WakuMessageHash) + Opt.none(WakuMessageHash) let paginationForwardBool = jsonContent["paginationForward"].getBool() let paginationForward = @@ -42,9 +42,9 @@ func fromJsonNode(jsonContent: JsonNode): Result[StoreQueryRequest, string] = let paginationLimit = if jsonContent.contains("paginationLimit"): - some(uint64(jsonContent["paginationLimit"].getInt())) + Opt.some(uint64(jsonContent["paginationLimit"].getInt())) else: - none(uint64) + Opt.none(uint64) let startTime = ?jsonContent.getProtoInt64("timeStart") let endTime = ?jsonContent.getProtoInt64("timeEnd") diff --git a/library/liblogosdelivery.nim b/library/liblogosdelivery.nim index d3753da63..57279c189 100644 --- a/library/liblogosdelivery.nim +++ b/library/liblogosdelivery.nim @@ -1,5 +1,4 @@ -import logos_delivery/waku/compat/option_valueor -import std/[atomics, options, macros] +import std/[atomics, macros] import chronicles, chronos, chronos/threadsync, ffi import logos_delivery/waku/waku_core/message/message, diff --git a/library/utils.nim b/library/utils.nim index 926ec4e88..005b725f4 100644 --- a/library/utils.nim +++ b/library/utils.nim @@ -1,7 +1,7 @@ -import std/[json, options, strutils] +import std/[json, strutils] import results -proc getProtoInt64*(node: JsonNode, key: string): Result[Option[int64], string] = +proc getProtoInt64*(node: JsonNode, key: string): Result[Opt[int64], string] = try: let (value, ok) = if node.hasKey(key): @@ -13,8 +13,8 @@ proc getProtoInt64*(node: JsonNode, key: string): Result[Option[int64], string] (0, false) if ok: - return ok(some(value)) + return ok(Opt.some(value)) - return ok(none(int64)) + return ok(Opt.none(int64)) except CatchableError: return err("Invalid int64 value in `" & key & "`") diff --git a/logos_delivery/api/conf/channels_conf.nim b/logos_delivery/api/conf/channels_conf.nim index 5d19e802a..9bef68942 100644 --- a/logos_delivery/api/conf/channels_conf.nim +++ b/logos_delivery/api/conf/channels_conf.nim @@ -1,15 +1,15 @@ -import std/options +import results type ReliableChannelManagerConf* = object - ## All-`Option` partial; unset fields fall back to `createReliableChannel` defaults. - segmentationEnableReedSolomon*: Option[bool] + ## All-`Opt` partial; unset fields fall back to `createReliableChannel` defaults. + segmentationEnableReedSolomon*: Opt[bool] ## Add Reed-Solomon parity segments for recovery of lost segments. - segmentationSegmentSizeBytes*: Option[int] ## Maximum segment size in bytes. - sdsAcknowledgementTimeoutMs*: Option[int] + segmentationSegmentSizeBytes*: Opt[int] ## Maximum segment size in bytes. + sdsAcknowledgementTimeoutMs*: Opt[int] ## Time to wait before retransmitting an unacknowledged message. - sdsMaxRetransmissions*: Option[int] + sdsMaxRetransmissions*: Opt[int] ## Maximum retransmission attempts before delivery fails. - sdsCausalHistorySize*: Option[int] ## Number of message ids kept in causal history. - rateLimitEnabled*: Option[bool] ## Enable rate limiting. - rateLimitEpochPeriodSec*: Option[int] ## Rate-limit epoch length in seconds. - rateLimitMessagesPerEpoch*: Option[int] ## Messages allowed per rate-limit epoch. + sdsCausalHistorySize*: Opt[int] ## Number of message ids kept in causal history. + rateLimitEnabled*: Opt[bool] ## Enable rate limiting. + rateLimitEpochPeriodSec*: Opt[int] ## Rate-limit epoch length in seconds. + rateLimitMessagesPerEpoch*: Opt[int] ## Messages allowed per rate-limit epoch. diff --git a/logos_delivery/api/conf/logos_delivery_conf.nim b/logos_delivery/api/conf/logos_delivery_conf.nim index e5ac7432a..bec9f9a78 100644 --- a/logos_delivery/api/conf/logos_delivery_conf.nim +++ b/logos_delivery/api/conf/logos_delivery_conf.nim @@ -1,19 +1,18 @@ {.push raises: [].} -import std/options import results import logos_delivery/api/conf/messaging_conf import logos_delivery/api/conf/channels_conf -export options, messaging_conf, channels_conf +export messaging_conf, channels_conf type LogosDeliveryConf* = object ## Aggregates the per-layer config objects. A layer is mounted iff its config ## is present. kernelConf*: KernelConf - messagingConf*: Option[MessagingClientConf] - channelsConf*: Option[ReliableChannelManagerConf] + messagingConf*: Opt[MessagingClientConf] + channelsConf*: Opt[ReliableChannelManagerConf] proc init*(T: type LogosDeliveryConf, kernelConf: KernelConf): LogosDeliveryConf = return LogosDeliveryConf(kernelConf: kernelConf) @@ -31,8 +30,8 @@ proc init*( return ok( LogosDeliveryConf( kernelConf: KernelConf(kernelConf), - messagingConf: some(merged), - channelsConf: some(channelsOverrides), + messagingConf: Opt.some(merged), + channelsConf: Opt.some(channelsOverrides), ) ) diff --git a/logos_delivery/api/conf/logos_delivery_conf_json.nim b/logos_delivery/api/conf/logos_delivery_conf_json.nim index e5df174e4..6440a63ac 100644 --- a/logos_delivery/api/conf/logos_delivery_conf_json.nim +++ b/logos_delivery/api/conf/logos_delivery_conf_json.nim @@ -1,6 +1,6 @@ {.push raises: [].} -import std/[json, options, strutils, tables] +import std/[json, strutils, tables] import results import tools/confutils/conf_from_json @@ -82,8 +82,8 @@ proc parseFlatConf( return ok( LogosDeliveryConf( kernelConf: KernelConf(kernel), - messagingConf: some(messaging), - channelsConf: some(ReliableChannelManagerConf()), + messagingConf: Opt.some(messaging), + channelsConf: Opt.some(ReliableChannelManagerConf()), ) ) diff --git a/logos_delivery/api/conf/messaging_conf.nim b/logos_delivery/api/conf/messaging_conf.nim index 86a73575b..a8c91acd7 100644 --- a/logos_delivery/api/conf/messaging_conf.nim +++ b/logos_delivery/api/conf/messaging_conf.nim @@ -1,7 +1,5 @@ -import std/options import std/net -import results -import libp2p/crypto/crypto +import results, libp2p/crypto/crypto import logos_delivery/api/conf/kernel_conf import logos_delivery/waku/common/logging @@ -15,44 +13,44 @@ type LogosDeliveryMode* {.pure.} = enum Fleet # kernel-only node from a raw kernel config type MessagingClientConf* = object - clusterId* {.name: "cluster-id".}: Option[uint16] ## Network cluster id. - numShardsInCluster* {.name: "num-shards-in-network".}: Option[uint16] + clusterId* {.name: "cluster-id".}: Opt[uint16] ## Network cluster id. + numShardsInCluster* {.name: "num-shards-in-network".}: Opt[uint16] ## Number of shards in the cluster. - p2pTcpPort* {.name: "tcp-port".}: Option[Port] ## TCP listening port. - discv5UdpPort* {.name: "discv5-udp-port".}: Option[Port] ## discv5 UDP port. - websocketSupport* {.name: "websocket-support".}: Option[bool] + p2pTcpPort* {.name: "tcp-port".}: Opt[Port] ## TCP listening port. + discv5UdpPort* {.name: "discv5-udp-port".}: Opt[Port] ## discv5 UDP port. + websocketSupport* {.name: "websocket-support".}: Opt[bool] ## Enable the websocket transport. - websocketPort* {.name: "websocket-port".}: Option[Port] ## Websocket listening port. - quicSupport* {.name: "quic-support".}: Option[bool] ## Enable the QUIC transport. - quicPort* {.name: "quic-port".}: Option[Port] ## QUIC (UDP) listening port. - listenIpv4* {.name: "listen-address".}: Option[IpAddress] ## Inbound bind address. - maxMessageSize* {.name: "max-msg-size".}: Option[string] + websocketPort* {.name: "websocket-port".}: Opt[Port] ## Websocket listening port. + quicSupport* {.name: "quic-support".}: Opt[bool] ## Enable the QUIC transport. + quicPort* {.name: "quic-port".}: Opt[Port] ## QUIC (UDP) listening port. + listenIpv4* {.name: "listen-address".}: Opt[IpAddress] ## Inbound bind address. + maxMessageSize* {.name: "max-msg-size".}: Opt[string] ## Maximum accepted message size (e.g. "150 KiB"). - entryNodes* {.name: "entry-node".}: Option[seq[string]] + entryNodes* {.name: "entry-node".}: Opt[seq[string]] ## Bootstrap / connectivity nodes (enrtree or multiaddr). - ethRpcEndpoints* {.name: "rln-relay-eth-client-address".}: Option[seq[EthRpcUrl]] + ethRpcEndpoints* {.name: "rln-relay-eth-client-address".}: Opt[seq[EthRpcUrl]] ## Ethereum RPC endpoints (required for RLN validation); multiple for fail-over. - rlnContractAddress* {.name: "rln-relay-eth-contract-address".}: Option[string] + rlnContractAddress* {.name: "rln-relay-eth-contract-address".}: Opt[string] ## RLN contract address; when set, RLN validation is enabled. - rlnChainId* {.name: "rln-relay-chain-id".}: Option[uint] + rlnChainId* {.name: "rln-relay-chain-id".}: Opt[uint] ## Chain id the RLN contract is deployed on. - rlnEpochSizeSec* {.name: "rln-relay-epoch-sec".}: Option[uint] + rlnEpochSizeSec* {.name: "rln-relay-epoch-sec".}: Opt[uint] ## RLN epoch size, in seconds. - reliabilityEnabled* {.name: "reliability".}: Option[bool] + reliabilityEnabled* {.name: "reliability".}: Opt[bool] ## Enable store-based send reliability. - store*: Option[bool] ## Enable the store protocol. - storenode* {.name: "storenode".}: Option[string] - storeMessageDbUrl* {.name: "store-message-db-url".}: Option[string] + store*: Opt[bool] ## Enable the store protocol. + storenode* {.name: "storenode".}: Opt[string] + storeMessageDbUrl* {.name: "store-message-db-url".}: Opt[string] ## Database connection URL for the store service's persistent storage. - storeMessageRetentionPolicy* {.name: "store-message-retention-policy".}: - Option[string] ## Store retention policy (e.g. "time:3600;size:1GB"). - storeMaxNumDbConnections* {.name: "store-max-num-db-connections".}: Option[int] + storeMessageRetentionPolicy* {.name: "store-message-retention-policy".}: Opt[string] + ## Store retention policy (e.g. "time:3600;size:1GB"). + storeMaxNumDbConnections* {.name: "store-max-num-db-connections".}: Opt[int] ## Maximum number of simultaneous store database connections. - logLevel* {.name: "log-level".}: Option[logging.LogLevel] + logLevel* {.name: "log-level".}: Opt[logging.LogLevel] ## Process log level (TRACE..FATAL); applied by the kernel on node creation. - logFormat* {.name: "log-format".}: Option[logging.LogFormat] + logFormat* {.name: "log-format".}: Opt[logging.LogFormat] ## Process log format (TEXT or JSON); applied by the kernel on node creation. - nodeKey* {.name: "nodekey".}: Option[crypto.PrivateKey] + nodeKey* {.name: "nodekey".}: Opt[crypto.PrivateKey] ## P2P node private key (64-char hex): stable identity / peerId across restarts. proc applyMode*(conf: var WakuNodeConf, mode: LogosDeliveryMode): ConfResult[void] = @@ -62,7 +60,7 @@ proc applyMode*(conf: var WakuNodeConf, mode: LogosDeliveryMode): ConfResult[voi conf.relay = true conf.filter = true conf.lightpush = true - conf.discv5Discovery = some(true) + conf.discv5Discovery = Opt.some(true) conf.peerExchange = true conf.rendezvous = true of LogosDeliveryMode.Edge: @@ -108,11 +106,11 @@ proc toWakuNodeConf*( conf.ethClientUrls = self.ethRpcEndpoints.get() if self.rlnContractAddress.isSome(): conf.rlnRelayEthContractAddress = self.rlnContractAddress.get() - conf.rlnRelay = some(true) + conf.rlnRelay = Opt.some(true) if self.rlnChainId.isSome(): conf.rlnRelayChainId = self.rlnChainId.get() if self.rlnEpochSizeSec.isSome(): - conf.rlnEpochSizeSec = some(self.rlnEpochSizeSec.get().uint64) + conf.rlnEpochSizeSec = Opt.some(self.rlnEpochSizeSec.get().uint64) if self.logLevel.isSome(): conf.logLevel = self.logLevel.get() if self.logFormat.isSome(): @@ -132,7 +130,7 @@ proc toWakuNodeConf*( proc merge*(base, overrides: MessagingClientConf): MessagingClientConf = var m = base for _, mField, oField in fieldPairs(m, overrides): - when oField is Option: + when oField is Opt: if oField.isSome(): mField = oField return m @@ -140,8 +138,8 @@ proc merge*(base, overrides: MessagingClientConf): MessagingClientConf = proc resolvePreset*(preset: string): ConfResult[MessagingClientConf] = ## Preset to messaging-only fields. Kernel-mirrored fields stay unset; the ## kernel resolves those from `conf.preset`. - let npcOpt = ?toNetworkPresetConf(preset, none(uint16)) + let npcOpt = ?toNetworkPresetConf(preset, Opt.none(uint16)) if npcOpt.isNone(): return ok(MessagingClientConf()) let npc = npcOpt.get() - return ok(MessagingClientConf(reliabilityEnabled: some(npc.p2pReliability))) + return ok(MessagingClientConf(reliabilityEnabled: Opt.some(npc.p2pReliability))) diff --git a/logos_delivery/api/types.nim b/logos_delivery/api/types.nim index 97e7a11c9..e21d1c3d0 100644 --- a/logos_delivery/api/types.nim +++ b/logos_delivery/api/types.nim @@ -1,8 +1,6 @@ -import logos_delivery/waku/compat/option_valueor -import libp2p/crypto/crypto {.push raises: [].} -import bearssl/rand, std/times, chronos +import libp2p/crypto/crypto, bearssl/rand, std/times, chronos import stew/byteutils import logos_delivery/waku/utils/requests as request_utils import logos_delivery/waku/waku_core/[topics/content_topic, message/message, time] diff --git a/logos_delivery/channels/api/channel_lifecycle.nim b/logos_delivery/channels/api/channel_lifecycle.nim index bacce83d8..0d32e2acf 100644 --- a/logos_delivery/channels/api/channel_lifecycle.nim +++ b/logos_delivery/channels/api/channel_lifecycle.nim @@ -1,6 +1,6 @@ ## Reliable Channel layer API — channel lifecycle ## (createReliableChannel / closeChannel). -import std/[options, tables] +import std/tables import results, chronos, chronicles import logos_delivery/api/types @@ -15,17 +15,17 @@ const SdsJobId = "sds" ## One persistency job shared by every channel's SDS state; rows are ## keyed by channelId. -proc sdsPersistence(): Option[Persistence] = +proc sdsPersistence(): Opt[Persistence] = ## SDS backend from the Persistency singleton; memory-only fallback when ## it is unavailable (e.g. unit tests). let p = Persistency.instance().valueOr: info "SDS persistence disabled, running memory-only", reason = $error - return none(Persistence) + return Opt.none(Persistence) let job = p.openJob(SdsJobId).valueOr: warn "SDS persistence disabled, could not open persistency job", jobId = SdsJobId, reason = $error - return none(Persistence) - return some(newSdsPersistence(job)) + return Opt.none(Persistence) + return Opt.some(newSdsPersistence(job)) proc createReliableChannel*( self: ReliableChannelManager, diff --git a/logos_delivery/channels/reliable_channel.nim b/logos_delivery/channels/reliable_channel.nim index 4daf8a1e2..ca74f9df4 100644 --- a/logos_delivery/channels/reliable_channel.nim +++ b/logos_delivery/channels/reliable_channel.nim @@ -1,4 +1,3 @@ -import logos_delivery/waku/compat/option_valueor ## Reliable Channel type. ## ## A `ReliableChannel` orchestrates segmentation, SDS (end-to-end @@ -14,9 +13,8 @@ import logos_delivery/waku/compat/option_valueor ## ## See: https://lip.logos.co/messaging/raw/reliable-channel-api.html -import std/[options, tables] -import results -import chronos +import std/tables +import results, chronos import bearssl/rand import stew/byteutils import libp2p/crypto/crypto as libp2p_crypto @@ -160,17 +158,17 @@ type ClaimedSegment = object channelReqId: RequestId isEphemeral: bool -proc claimAwaitingChannelReq(self: ReliableChannel): Option[ClaimedSegment] = +proc claimAwaitingChannelReq(self: ReliableChannel): Opt[ClaimedSegment] = for channelReqId, state in self.channelReqs.mpairs: if state.awaitingDispatch > 0: state.awaitingDispatch.dec() - return some( + return Opt.some( ClaimedSegment( channelReqId: channelReqId, isEphemeral: state.persistenceReqType == MessagePersistence.Ephemeral, ) ) - return none(ClaimedSegment) + return Opt.none(ClaimedSegment) type MessagingOutcome {.pure.} = enum Sent diff --git a/logos_delivery/channels/scalable_data_sync/scalable_data_sync.nim b/logos_delivery/channels/scalable_data_sync/scalable_data_sync.nim index 8da0c8530..81e1f6ac9 100644 --- a/logos_delivery/channels/scalable_data_sync/scalable_data_sync.nim +++ b/logos_delivery/channels/scalable_data_sync/scalable_data_sync.nim @@ -8,7 +8,7 @@ {.push raises: [].} -import std/[options, tables] +import std/tables from std/times import initDuration, getTime, toUnix, nanosecond import results, chronos, chronicles import nimcrypto/keccak @@ -37,7 +37,7 @@ type acknowledgementTimeoutMs*: int maxRetransmissions*: int causalHistorySize*: int - persistence*: Option[Persistence] + persistence*: Opt[Persistence] ## Durability backend. `none` runs memory-only: reliability still ## works, state does not survive a restart. diff --git a/logos_delivery/channels/segmentation/segmentation.nim b/logos_delivery/channels/segmentation/segmentation.nim index 9fc7964c0..148a6e08c 100644 --- a/logos_delivery/channels/segmentation/segmentation.nim +++ b/logos_delivery/channels/segmentation/segmentation.nim @@ -9,8 +9,7 @@ ## ## See: https://lip.logos.co/messaging/raw/reliable-channel-api.html -import std/options -import ./segment_message_proto +import results, ./segment_message_proto import ./segmentation_persistence export segment_message_proto, segmentation_persistence @@ -54,12 +53,12 @@ proc performSegmentation*( proc handleIncomingSegment*( self: SegmentationHandler, segmentBytes: seq[byte] -): Option[ReassemblyResult] = +): Opt[ReassemblyResult] = ## Skeleton behaviour: every segment is already a complete message ## (since `performSegmentation` always emits one), so just hand the ## payload straight back. let segment = SegmentMessageProto.decode(segmentBytes) - return some( + return Opt.some( ReassemblyResult( payload: segment.payload, entireMessageHash: segment.entireMessageHash ) diff --git a/logos_delivery/logos_delivery.nim b/logos_delivery/logos_delivery.nim index 0e1f77104..35e9f6a97 100644 --- a/logos_delivery/logos_delivery.nim +++ b/logos_delivery/logos_delivery.nim @@ -9,7 +9,6 @@ {.push raises: [].} -import std/options import results, chronos, chronicles # Each layer has a core module (type + new/start/stop) and an api/ folder whose @@ -111,8 +110,8 @@ proc new*( return await LogosDelivery.new( LogosDeliveryConf( kernelConf: KernelConf(conf), - messagingConf: some(MessagingClientConf()), - channelsConf: some(ReliableChannelManagerConf()), + messagingConf: Opt.some(MessagingClientConf()), + channelsConf: Opt.some(ReliableChannelManagerConf()), ), appCallbacks, ) @@ -136,8 +135,8 @@ proc new*( return await LogosDelivery.new( LogosDeliveryConf( kernelConf: kernelConf, - messagingConf: some(messagingOverrides), - channelsConf: some(channelsOverrides), + messagingConf: Opt.some(messagingOverrides), + channelsConf: Opt.some(channelsOverrides), ), appCallbacks, ) diff --git a/logos_delivery/messaging/delivery_service/recv_service/recv_service.nim b/logos_delivery/messaging/delivery_service/recv_service/recv_service.nim index d2c369d46..57c7f1c4f 100644 --- a/logos_delivery/messaging/delivery_service/recv_service/recv_service.nim +++ b/logos_delivery/messaging/delivery_service/recv_service/recv_service.nim @@ -1,9 +1,8 @@ -import logos_delivery/waku/compat/option_valueor ## This module is in charge of taking care of the messages that this node is expecting to ## receive and is backed by store-v3 requests to get an additional degree of certainty ## -import std/[tables, sequtils, options, sets] +import results, std/[tables, sequtils, sets] import chronos, chronicles, libp2p/utility import brokers/broker_context import @@ -112,10 +111,10 @@ proc checkStore*(self: RecvService) {.async.} = await self.waku.storeQueryToAny( StoreQueryRequest( includeData: false, - pubsubTopic: some(pubsubTopic), + pubsubTopic: Opt.some(pubsubTopic), contentTopics: toSeq(contentTopics), - startTime: some(self.startTimeToCheck - DelayExtra.nanos), - endTime: some(self.endTimeToCheck + DelayExtra.nanos), + startTime: Opt.some(self.startTimeToCheck - DelayExtra.nanos), + endTime: Opt.some(self.endTimeToCheck + DelayExtra.nanos), ) ) ).valueOr: diff --git a/logos_delivery/messaging/delivery_service/send_service/delivery_task.nim b/logos_delivery/messaging/delivery_service/send_service/delivery_task.nim index 1f76078fe..f0c9d9942 100644 --- a/logos_delivery/messaging/delivery_service/send_service/delivery_task.nim +++ b/logos_delivery/messaging/delivery_service/send_service/delivery_task.nim @@ -1,5 +1,4 @@ -import logos_delivery/waku/compat/option_valueor -import std/[options, times], chronos +import results, std/times, chronos import brokers/broker_context import logos_delivery/waku/waku_core, @@ -24,7 +23,7 @@ type DeliveryTask* = ref object tryCount*: int state*: DeliveryState deliveryTime*: Moment - firstPropagatedTime*: Option[Moment] + firstPropagatedTime*: Opt[Moment] ## Set once on the first successful propagation; never reset on re-publish. ## Anchors the store-validation time cap (see propagationAge). propagateEventEmitted*: bool @@ -39,7 +38,7 @@ proc new*( let msg = envelop.toWakuMessage() # TODO: use sync request for such as soon as available let relayShardRes = ( - RequestRelayShard.request(brokerCtx, none[PubsubTopic](), envelop.contentTopic) + RequestRelayShard.request(brokerCtx, Opt.none(PubsubTopic), envelop.contentTopic) ).valueOr: error "RequestRelayShard.request failed", error = error return err("Failed create DeliveryTask: " & $error) diff --git a/logos_delivery/messaging/delivery_service/send_service/lightpush_processor.nim b/logos_delivery/messaging/delivery_service/send_service/lightpush_processor.nim index fa199774b..58ffc3d70 100644 --- a/logos_delivery/messaging/delivery_service/send_service/lightpush_processor.nim +++ b/logos_delivery/messaging/delivery_service/send_service/lightpush_processor.nim @@ -1,7 +1,4 @@ -import logos_delivery/waku/compat/option_valueor -import chronicles, chronos, results -import std/options -import brokers/broker_context +import chronicles, chronos, results, brokers/broker_context import logos_delivery/waku/waku_core, logos_delivery/waku/waku import logos_delivery/waku/api/publish @@ -54,7 +51,7 @@ method sendImpl*( task.state = DeliveryState.SuccessfullyPropagated task.deliveryTime = Moment.now() if task.firstPropagatedTime.isNone(): - task.firstPropagatedTime = some(Moment.now()) + task.firstPropagatedTime = Opt.some(Moment.now()) # TODO: with a simple retry processor it might be more accurate to say `Sent` else: # Controversial state, publish says ok but no peer. It should not happen. diff --git a/logos_delivery/messaging/delivery_service/send_service/relay_processor.nim b/logos_delivery/messaging/delivery_service/send_service/relay_processor.nim index dc40b797d..cc53d0fb3 100644 --- a/logos_delivery/messaging/delivery_service/send_service/relay_processor.nim +++ b/logos_delivery/messaging/delivery_service/send_service/relay_processor.nim @@ -1,6 +1,4 @@ -import logos_delivery/waku/compat/option_valueor -import std/options -import chronos, chronicles +import results, chronos, chronicles import brokers/broker_context import logos_delivery/waku/[waku_core], logos_delivery/waku/waku_lightpush/[common, rpc] import logos_delivery/waku/requests/health_requests @@ -77,7 +75,7 @@ method sendImpl*(self: RelaySendProcessor, task: DeliveryTask) {.async.} = task.state = DeliveryState.SuccessfullyPropagated task.deliveryTime = Moment.now() if task.firstPropagatedTime.isNone(): - task.firstPropagatedTime = some(Moment.now()) + task.firstPropagatedTime = Opt.some(Moment.now()) else: # It shall not happen, but still covering it task.state = self.fallbackStateToSet diff --git a/logos_delivery/messaging/delivery_service/send_service/send_service.nim b/logos_delivery/messaging/delivery_service/send_service/send_service.nim index 037ad879b..097bb0752 100644 --- a/logos_delivery/messaging/delivery_service/send_service/send_service.nim +++ b/logos_delivery/messaging/delivery_service/send_service/send_service.nim @@ -1,8 +1,7 @@ -import logos_delivery/waku/compat/option_valueor ## This module reinforces the publish operation with regular store-v3 requests. ## -import std/[sequtils, tables, options, typetraits] +import std/[sequtils, tables, typetraits] import chronos, chronicles, libp2p/utility import brokers/broker_context import diff --git a/logos_delivery/messaging/messaging_client.nim b/logos_delivery/messaging/messaging_client.nim index 1044122d3..d883878fb 100644 --- a/logos_delivery/messaging/messaging_client.nim +++ b/logos_delivery/messaging/messaging_client.nim @@ -1,7 +1,6 @@ ## Messaging layer core: the `MessagingClient` type plus its construction and ## lifecycle. The public operations (subscribe / unsubscribe / send) live in ## `messaging/api.nim`. -import std/options import results, chronos, chronicles import logos_delivery/api/conf/messaging_conf, diff --git a/logos_delivery/waku/api/filter.nim b/logos_delivery/waku/api/filter.nim index 06c78213f..4305aceb8 100644 --- a/logos_delivery/waku/api/filter.nim +++ b/logos_delivery/waku/api/filter.nim @@ -1,8 +1,6 @@ ## Waku layer API — filter (light client) operations. -import logos_delivery/waku/compat/option_valueor {.push raises: [].} -import std/options import results, chronos, chronicles import logos_delivery/waku/waku @@ -36,7 +34,7 @@ proc filterSubscribe*( let peer = self.node.peerManager.selectPeer(WakuFilterSubscribeCodec).valueOr: return err("could not find peer with WakuFilterSubscribeCodec when subscribing") - let subFut = self.node.filterSubscribe(some(pubsubTopic), contentTopics, peer) + let subFut = self.node.filterSubscribe(Opt.some(pubsubTopic), contentTopics, peer) if not await subFut.withTimeout(FilterOpTimeout): return err("filter subscription timed out") subFut.read().isOkOr: @@ -57,7 +55,8 @@ proc filterUnsubscribe*( let peer = self.node.peerManager.selectPeer(WakuFilterSubscribeCodec).valueOr: return err("could not find peer with WakuFilterSubscribeCodec when unsubscribing") - let unsubFut = self.node.filterUnsubscribe(some(pubsubTopic), contentTopics, peer) + let unsubFut = + self.node.filterUnsubscribe(Opt.some(pubsubTopic), contentTopics, peer) if not await unsubFut.withTimeout(FilterOpTimeout): return err("filter un-subscription timed out") unsubFut.read().isOkOr: diff --git a/logos_delivery/waku/api/lightpush.nim b/logos_delivery/waku/api/lightpush.nim index 6208a2643..34ffca85f 100644 --- a/logos_delivery/waku/api/lightpush.nim +++ b/logos_delivery/waku/api/lightpush.nim @@ -1,5 +1,4 @@ ## Waku layer API — lightpush (light client publish) operations. -import logos_delivery/waku/compat/option_valueor {.push raises: [].} import results, chronos, chronicles diff --git a/logos_delivery/waku/api/peer_manager.nim b/logos_delivery/waku/api/peer_manager.nim index 3a73051b8..054c94dae 100644 --- a/logos_delivery/waku/api/peer_manager.nim +++ b/logos_delivery/waku/api/peer_manager.nim @@ -1,7 +1,7 @@ ## Waku layer API — peer management operations. {.push raises: [].} -import std/[options, sequtils, strutils] +import std/[sequtils, strutils] import results, chronos, chronicles import libp2p/[peerid, peerstore] diff --git a/logos_delivery/waku/api/publish.nim b/logos_delivery/waku/api/publish.nim index f9f3229f6..d1dffd5a0 100644 --- a/logos_delivery/waku/api/publish.nim +++ b/logos_delivery/waku/api/publish.nim @@ -5,10 +5,8 @@ ## `WakuLightPushResult` (status code + description) that the send processors ## branch on for their retry decisions, and expose relay/lightpush availability ## so the messaging layer never inspects `waku.node` directly. -import logos_delivery/waku/compat/option_valueor {.push raises: [].} -import std/options import results, chronos import logos_delivery/waku/waku @@ -46,7 +44,7 @@ proc relayPushHandler*(self: Waku): PushMessageHandler = proc lightpushPeerAvailable*(self: Waku, shard: PubsubTopic): bool = ## True if a lightpush service peer is available for `shard`. - return self.node.peerManager.selectPeer(WakuLightPushCodec, some(shard)).isSome() + return self.node.peerManager.selectPeer(WakuLightPushCodec, Opt.some(shard)).isSome() proc lightpushPublishToAny*( self: Waku, shard: PubsubTopic, message: WakuMessage @@ -55,9 +53,9 @@ proc lightpushPublishToAny*( ## through the node's lightpush flow, which attaches an RLN proof per ## attempt when RLN is mounted. Returns SERVICE_NOT_AVAILABLE when no peer ## is available. - let peer = self.node.peerManager.selectPeer(WakuLightPushCodec, some(shard)).valueOr: + let peer = self.node.peerManager.selectPeer(WakuLightPushCodec, Opt.some(shard)).valueOr: return lightpushResultServiceUnavailable("no lightpush peer available for shard") try: - return await self.node.lightpushPublish(some(shard), message, some(peer)) + return await self.node.lightpushPublish(Opt.some(shard), message, Opt.some(peer)) except CatchableError as e: return lightpushResultInternalError(e.msg) diff --git a/logos_delivery/waku/api/store.nim b/logos_delivery/waku/api/store.nim index a54ebe1f3..0154e3b3c 100644 --- a/logos_delivery/waku/api/store.nim +++ b/logos_delivery/waku/api/store.nim @@ -1,7 +1,6 @@ ## Waku layer API — store (historical query) operations. {.push raises: [].} -import std/options import results, chronos, chronicles import logos_delivery/waku/waku diff --git a/logos_delivery/waku/common/databases/db_postgres/dbconn.nim b/logos_delivery/waku/common/databases/db_postgres/dbconn.nim index ce0eaa213..f24f3d4dd 100644 --- a/logos_delivery/waku/common/databases/db_postgres/dbconn.nim +++ b/logos_delivery/waku/common/databases/db_postgres/dbconn.nim @@ -1,4 +1,3 @@ -import logos_delivery/waku/compat/option_valueor import std/[times, strutils, os, sets, strformat, tables], results, diff --git a/logos_delivery/waku/common/databases/db_postgres/pgasyncpool.nim b/logos_delivery/waku/common/databases/db_postgres/pgasyncpool.nim index b04319a65..0b298084e 100644 --- a/logos_delivery/waku/common/databases/db_postgres/pgasyncpool.nim +++ b/logos_delivery/waku/common/databases/db_postgres/pgasyncpool.nim @@ -1,4 +1,3 @@ -import logos_delivery/waku/compat/option_valueor # Simple async pool driver for postgress. # Inspired by: https://github.com/treeform/pg/ {.push raises: [].} diff --git a/logos_delivery/waku/common/databases/db_sqlite.nim b/logos_delivery/waku/common/databases/db_sqlite.nim index e8237bfe6..5af1e038c 100644 --- a/logos_delivery/waku/common/databases/db_sqlite.nim +++ b/logos_delivery/waku/common/databases/db_sqlite.nim @@ -1,4 +1,3 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} # The code in this file is an adaptation of the Sqlite KV Store found in nim-eth. # https://github.com/status-im/nim-eth/blob/master/eth/db/kvstore_sqlite3.nim @@ -172,11 +171,11 @@ proc exec*[P](s: SqliteStmt[P, void], params: P): DatabaseResult[void] = res template readResult(s: RawStmtPtr, column: cint, T: type): auto = - when T is Option: + when T is Opt: if sqlite3_column_type(s, column) == SQLITE_NULL: - none(typeof(default(T).get())) + Opt.none(typeof(default(T).get())) else: - some(readSimpleResult(s, column, typeof(default(T).get()))) + Opt.some(readSimpleResult(s, column, typeof(default(T).get()))) else: readSimpleResult(s, column, T) diff --git a/logos_delivery/waku/common/enr/builder.nim b/logos_delivery/waku/common/enr/builder.nim index 3c5455d52..906a9e92a 100644 --- a/logos_delivery/waku/common/enr/builder.nim +++ b/logos_delivery/waku/common/enr/builder.nim @@ -1,7 +1,7 @@ {.push raises: [].} import - std/[options, net], + std/net, results, eth/keys as eth_keys, eth/p2p/discoveryv5/enr, @@ -62,22 +62,22 @@ proc build*(builder: EnrBuilder): EnrResult[enr.Record] = ## Builder extension: IP address and TCP/UDP ports proc addAddressAndPorts( - builder: var EnrBuilder, ip: IpAddress, tcpPort, udpPort: Option[Port] + builder: var EnrBuilder, ip: IpAddress, tcpPort, udpPort: Opt[Port] ) = builder.ipAddress = Opt.some(ip) - builder.tcpPort = tcpPort.toOpt() - builder.udpPort = udpPort.toOpt() + builder.tcpPort = tcpPort + builder.udpPort = udpPort -proc addPorts(builder: var EnrBuilder, tcp, udp: Option[Port]) = +proc addPorts(builder: var EnrBuilder, tcp, udp: Opt[Port]) = # Based on: https://github.com/status-im/nim-eth/blob/4b22fcd/eth/p2p/discoveryv5/enr.nim#L166 - builder.tcpPort = tcp.toOpt() - builder.udpPort = udp.toOpt() + builder.tcpPort = tcp + builder.udpPort = udp proc withIpAddressAndPorts*( builder: var EnrBuilder, - ipAddr = none(IpAddress), - tcpPort = none(Port), - udpPort = none(Port), + ipAddr = Opt.none(IpAddress), + tcpPort = Opt.none(Port), + udpPort = Opt.none(Port), ) = if ipAddr.isSome(): addAddressAndPorts(builder, ipAddr.get(), tcpPort, udpPort) diff --git a/logos_delivery/waku/common/enr/typed_record.nim b/logos_delivery/waku/common/enr/typed_record.nim index 94353d01d..5c619d84c 100644 --- a/logos_delivery/waku/common/enr/typed_record.nim +++ b/logos_delivery/waku/common/enr/typed_record.nim @@ -1,23 +1,9 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} -import std/options, results, eth/keys as eth_keys, libp2p/crypto/crypto as libp2p_crypto +import results, eth/keys as eth_keys, libp2p/crypto/crypto as libp2p_crypto import eth/p2p/discoveryv5/enr except TypedRecord, toTypedRecord -## Since enr changed to result.Opt[T] from Option[T] for intercompatibility introduce a conversion between -func toOpt*[T](o: Option[T]): Opt[T] = - if o.isSome(): - return Opt.some(o.get()) - else: - return Opt.none(T) - -func toOption*[T](o: Opt[T]): Option[T] = - if o.isSome(): - return some(o.get()) - else: - return none(T) - ## ENR typed record # Record identity scheme @@ -44,8 +30,8 @@ type TypedRecord* = object proc init(T: type TypedRecord, record: Record): T = TypedRecord(raw: record) -proc tryGet*(record: TypedRecord, field: string, T: type): Option[T] = - return record.raw.tryGet(field, T).toOption() +proc tryGet*(record: TypedRecord, field: string, T: type): Opt[T] = + return record.raw.tryGet(field, T) func toTyped*(record: Record): EnrResult[TypedRecord] = let tr = TypedRecord.init(record) @@ -61,38 +47,38 @@ func toTyped*(record: Record): EnrResult[TypedRecord] = # Typed record field accessors -func id*(record: TypedRecord): Option[RecordId] = +func id*(record: TypedRecord): Opt[RecordId] = let fieldOpt = record.tryGet("id", string) if fieldOpt.isNone(): - return none(RecordId) + return Opt.none(RecordId) let field = toRecordId(fieldOpt.get()).valueOr: - return none(RecordId) + return Opt.none(RecordId) - return some(field) + return Opt.some(field) -func secp256k1*(record: TypedRecord): Option[array[33, byte]] = +func secp256k1*(record: TypedRecord): Opt[array[33, byte]] = record.tryGet("secp256k1", array[33, byte]) -func ip*(record: TypedRecord): Option[array[4, byte]] = +func ip*(record: TypedRecord): Opt[array[4, byte]] = record.tryGet("ip", array[4, byte]) -func ip6*(record: TypedRecord): Option[array[16, byte]] = +func ip6*(record: TypedRecord): Opt[array[16, byte]] = record.tryGet("ip6", array[16, byte]) -func tcp*(record: TypedRecord): Option[uint16] = +func tcp*(record: TypedRecord): Opt[uint16] = record.tryGet("tcp", uint16) -func tcp6*(record: TypedRecord): Option[uint16] = +func tcp6*(record: TypedRecord): Opt[uint16] = let port = record.tryGet("tcp6", uint16) if port.isNone(): return record.tcp() return port -func udp*(record: TypedRecord): Option[uint16] = +func udp*(record: TypedRecord): Opt[uint16] = record.tryGet("udp", uint16) -func udp6*(record: TypedRecord): Option[uint16] = +func udp6*(record: TypedRecord): Opt[uint16] = let port = record.tryGet("udp6", uint16) if port.isNone(): return record.udp() diff --git a/logos_delivery/waku/common/paging.nim b/logos_delivery/waku/common/paging.nim index c963a24bc..0cbcb625e 100644 --- a/logos_delivery/waku/common/paging.nim +++ b/logos_delivery/waku/common/paging.nim @@ -1,4 +1,4 @@ -import std/options +import results type PagingDirection* {.pure.} = enum ## PagingDirection determines the direction of pagination @@ -11,7 +11,7 @@ proc default*(): PagingDirection {.inline.} = proc into*(b: bool): PagingDirection = PagingDirection(b) -proc into*(b: Option[bool]): PagingDirection = +proc into*(b: Opt[bool]): PagingDirection = if b.isNone(): return default() b.get().into() @@ -19,7 +19,7 @@ proc into*(b: Option[bool]): PagingDirection = proc into*(d: PagingDirection): bool = d == PagingDirection.FORWARD -proc into*(d: Option[PagingDirection]): bool = +proc into*(d: Opt[PagingDirection]): bool = if d.isNone(): return false d.get().into() diff --git a/logos_delivery/waku/common/protobuf.nim b/logos_delivery/waku/common/protobuf.nim index 767bdaea3..a47fb7435 100644 --- a/logos_delivery/waku/common/protobuf.nim +++ b/logos_delivery/waku/common/protobuf.nim @@ -2,7 +2,7 @@ {.push raises: [].} -import std/options, libp2p/protobuf/minprotobuf, libp2p/varint +import results, libp2p/protobuf/minprotobuf, libp2p/varint export minprotobuf, varint @@ -39,7 +39,7 @@ proc invalidLengthField*(T: type ProtobufError, field: string): T = ## Extension methods proc write3*(proto: var ProtoBuffer, field: int, value: auto) = - when value is Option: + when value is Opt: if value.isSome(): proto.write(field, value.get()) else: diff --git a/logos_delivery/waku/common/rate_limit/per_peer_limiter.nim b/logos_delivery/waku/common/rate_limit/per_peer_limiter.nim index 16b6bf065..886a8f9b2 100644 --- a/logos_delivery/waku/common/rate_limit/per_peer_limiter.nim +++ b/logos_delivery/waku/common/rate_limit/per_peer_limiter.nim @@ -6,19 +6,19 @@ {.push raises: [].} -import std/[options, tables], libp2p/stream/connection +import results, std/tables, libp2p/stream/connection import ./[single_token_limiter, service_metrics], ../../utils/tableutils export token_bucket, setting, service_metrics type PerPeerRateLimiter* = ref object of RootObj - setting*: Option[RateLimitSetting] - peerBucket: Table[PeerId, Option[TokenBucket]] + setting*: Opt[RateLimitSetting] + peerBucket: Table[PeerId, Opt[TokenBucket]] proc mgetOrPut( perPeerRateLimiter: var PerPeerRateLimiter, peerId: PeerId -): var Option[TokenBucket] = +): var Opt[TokenBucket] = return perPeerRateLimiter.peerBucket.mgetOrPut( peerId, newTokenBucket(perPeerRateLimiter.setting, ReplenishMode.Continuous) ) diff --git a/logos_delivery/waku/common/rate_limit/request_limiter.nim b/logos_delivery/waku/common/rate_limit/request_limiter.nim index 9fccf1c29..68e5e3120 100644 --- a/logos_delivery/waku/common/rate_limit/request_limiter.nim +++ b/logos_delivery/waku/common/rate_limit/request_limiter.nim @@ -1,4 +1,3 @@ -import logos_delivery/waku/compat/option_valueor ## RequestRateLimiter ## ## RequestRateLimiter is a general service protection mechanism. @@ -17,11 +16,7 @@ import logos_delivery/waku/compat/option_valueor {.push raises: [].} import - std/[options, math], - chronicles, - chronos/timer, - libp2p/stream/connection, - libp2p/utility + results, std/math, chronicles, chronos/timer, libp2p/stream/connection, libp2p/utility import std/times except TimeInterval, Duration, seconds, minutes @@ -41,7 +36,7 @@ const MINUTES_RATIO = 2 type RequestRateLimiter* = ref object of RootObj tokenBucket: TokenBucket - setting*: Option[RateLimitSetting] + setting*: Opt[RateLimitSetting] mainBucketSetting: RateLimitSetting ratio: int peerBucketSetting*: RateLimitSetting @@ -80,7 +75,7 @@ proc mgetOrPut( requestRateLimiter: var RequestRateLimiter, peerId: PeerId, now: Moment ): var TokenBucket = let bucketForNew = newTokenBucket( - some(requestRateLimiter.peerBucketSetting), Discrete, now + Opt.some(requestRateLimiter.peerBucketSetting), Discrete, now ).valueOr: raiseAssert "This branch is not allowed to be reached as it will not be called if the setting is None." @@ -137,7 +132,7 @@ template checkUsageLimit*( bodyRejected # TODO: review these ratio assumptions! Debatable! -func calcPeriodRatio(settingOpt: Option[RateLimitSetting]): int = +func calcPeriodRatio(settingOpt: Opt[RateLimitSetting]): int = settingOpt.withValue(setting): if setting.isUnlimited(): return UNLIMITED_RATIO @@ -155,7 +150,7 @@ func calcPeriodRatio(settingOpt: Option[RateLimitSetting]): int = # calculates peer cache items timeout # effectively if a peer does not issue any requests for this amount of time will be forgotten. -func calcCacheTimeout(settingOpt: Option[RateLimitSetting], ratio: int): Duration = +func calcCacheTimeout(settingOpt: Opt[RateLimitSetting], ratio: int): Duration = settingOpt.withValue(setting): if setting.isUnlimited(): return UNLIMITED_TIMEOUT @@ -167,7 +162,7 @@ func calcCacheTimeout(settingOpt: Option[RateLimitSetting], ratio: int): Duratio return UNLIMITED_TIMEOUT func calcPeerTokenSetting( - setting: Option[RateLimitSetting], ratio: int + setting: Opt[RateLimitSetting], ratio: int ): RateLimitSetting = let s = setting.valueOr: return (0, 0.minutes) @@ -178,7 +173,7 @@ func calcPeerTokenSetting( return (peerVolume, peerPeriod) -proc newRequestRateLimiter*(setting: Option[RateLimitSetting]): RequestRateLimiter = +proc newRequestRateLimiter*(setting: Opt[RateLimitSetting]): RequestRateLimiter = let ratio = calcPeriodRatio(setting) let isLimited = setting.isSome() and not setting.get().isUnlimited() let mainBucketSetting = diff --git a/logos_delivery/waku/common/rate_limit/service_metrics.nim b/logos_delivery/waku/common/rate_limit/service_metrics.nim index 4453dc5bd..47c66f7ae 100644 --- a/logos_delivery/waku/common/rate_limit/service_metrics.nim +++ b/logos_delivery/waku/common/rate_limit/service_metrics.nim @@ -1,7 +1,6 @@ {.push raises: [].} -import std/options -import metrics, setting +import results, metrics, setting export metrics @@ -14,7 +13,7 @@ declarePublicCounter waku_service_requests, declarePublicCounter waku_service_network_bytes, "total incoming traffic of specific waku services", labels = ["service", "direction"] -proc setServiceLimitMetric*(service: string, limit: Option[RateLimitSetting]) = +proc setServiceLimitMetric*(service: string, limit: Opt[RateLimitSetting]) = if limit.isSome() and not limit.get().isUnlimited(): waku_service_requests_limit.set( limit.get().calculateLimitPerSecond(), labelValues = [service] diff --git a/logos_delivery/waku/common/rate_limit/setting.nim b/logos_delivery/waku/common/rate_limit/setting.nim index 66ff79d17..e3669ebd6 100644 --- a/logos_delivery/waku/common/rate_limit/setting.nim +++ b/logos_delivery/waku/common/rate_limit/setting.nim @@ -1,6 +1,6 @@ {.push raises: [].} -import chronos/timer, std/[tables, strutils, options], regex, results +import chronos/timer, std/[tables, strutils], regex, results # Setting for TokenBucket defined as volume over period of time type RateLimitSetting* = tuple[volume: int, period: Duration] diff --git a/logos_delivery/waku/common/rate_limit/single_token_limiter.nim b/logos_delivery/waku/common/rate_limit/single_token_limiter.nim index fc4b0acd5..954c8445f 100644 --- a/logos_delivery/waku/common/rate_limit/single_token_limiter.nim +++ b/logos_delivery/waku/common/rate_limit/single_token_limiter.nim @@ -2,7 +2,7 @@ {.push raises: [].} -import std/[options], chronos/timer, libp2p/stream/connection, libp2p/utility +import results, chronos/timer, libp2p/stream/connection, libp2p/utility import std/times except TimeInterval, Duration @@ -12,17 +12,17 @@ import ./[setting, service_metrics] export token_bucket, setting, service_metrics proc newTokenBucket*( - setting: Option[RateLimitSetting], + setting: Opt[RateLimitSetting], replenishMode: static[ReplenishMode] = ReplenishMode.Continuous, startTime: Moment = Moment.now(), -): Option[TokenBucket] = +): Opt[TokenBucket] = if setting.isNone(): - return none[TokenBucket]() + return Opt.none(TokenBucket) if setting.get().isUnlimited(): - return none[TokenBucket]() + return Opt.none(TokenBucket) - return some( + return Opt.some( TokenBucket.new( capacity = setting.get().volume, fillDuration = setting.get().period, @@ -40,7 +40,7 @@ proc checkUsage( return true proc checkUsage( - t: var Option[TokenBucket], proto: string, now = Moment.now() + t: var Opt[TokenBucket], proto: string, now = Moment.now() ): bool {.raises: [].} = if t.isNone(): return true @@ -49,7 +49,7 @@ proc checkUsage( return checkUsage(tokenBucket, proto, now) template checkUsageLimit*( - t: var Option[TokenBucket] | var TokenBucket, + t: var Opt[TokenBucket] | var TokenBucket, proto: string, conn: Connection, bodyWithinLimit, bodyRejected: untyped, diff --git a/logos_delivery/waku/common/utils/matterbridge_client.nim b/logos_delivery/waku/common/utils/matterbridge_client.nim index e8593aeff..841d49b9a 100644 --- a/logos_delivery/waku/common/utils/matterbridge_client.nim +++ b/logos_delivery/waku/common/utils/matterbridge_client.nim @@ -1,6 +1,6 @@ {.push raises: [].} -import std/[httpclient, json, uri, options], results +import std/[httpclient, json, uri], results const # Resource locators diff --git a/logos_delivery/waku/common/utils/nat.nim b/logos_delivery/waku/common/utils/nat.nim index 125a48935..6a258278f 100644 --- a/logos_delivery/waku/common/utils/nat.nim +++ b/logos_delivery/waku/common/utils/nat.nim @@ -1,6 +1,6 @@ {.push raises: [].} -import std/[options, strutils, net] +import std/[strutils, net] import chronicles, eth/net/nat, results, nativesockets logScope: @@ -18,9 +18,9 @@ var singletonNat: bool = false # TODO: pass `NatStrategy`, not a string proc setupNat*( natConf, clientId: string, tcpPort, udpPort: Port -): Result[ - tuple[ip: Option[IpAddress], tcpPort: Option[Port], udpPort: Option[Port]], string -] {.gcsafe.} = +): Result[tuple[ip: Opt[IpAddress], tcpPort: Opt[Port], udpPort: Opt[Port]], string] {. + gcsafe +.} = let strategy = case natConf.toLowerAscii() of "any": NatAny @@ -29,8 +29,7 @@ proc setupNat*( of "pmp": NatPmp else: NatNone - var endpoint: - tuple[ip: Option[IpAddress], tcpPort: Option[Port], udpPort: Option[Port]] + var endpoint: tuple[ip: Opt[IpAddress], tcpPort: Opt[Port], udpPort: Opt[Port]] if strategy != NatNone: ## Only initialize the NAT module once @@ -47,7 +46,7 @@ proc setupNat*( warn "exception in setupNat", error = getCurrentExceptionMsg() if extIP.isSome(): - endpoint.ip = some(extIp.get()) + endpoint.ip = Opt.some(extIp.get()) # RedirectPorts in considered a gcsafety violation # because it obtains the address of a non-gcsafe proc? var extPorts: Opt[(Port, Port)] @@ -65,15 +64,15 @@ proc setupNat*( if extPorts.isSome(): let (extTcpPort, extUdpPort) = extPorts.get() - endpoint.tcpPort = some(extTcpPort) - endpoint.udpPort = some(extUdpPort) + endpoint.tcpPort = Opt.some(extTcpPort) + endpoint.udpPort = Opt.some(extUdpPort) else: # NatNone if not natConf.startsWith("extip:"): return err("not a valid NAT mechanism: " & $natConf) try: # any required port redirection is assumed to be done by hand - endpoint.ip = some(parseIpAddress(natConf[6 ..^ 1])) + endpoint.ip = Opt.some(parseIpAddress(natConf[6 ..^ 1])) except ValueError: return err("not a valid IP address: " & $natConf[6 ..^ 1]) diff --git a/logos_delivery/waku/common/utils/parse_size_units.nim b/logos_delivery/waku/common/utils/parse_size_units.nim index 3b8c1d1a7..14f41a933 100644 --- a/logos_delivery/waku/common/utils/parse_size_units.nim +++ b/logos_delivery/waku/common/utils/parse_size_units.nim @@ -1,4 +1,3 @@ -import logos_delivery/waku/compat/option_valueor import std/[strutils, math], results, regex proc parseMsgSize*(input: string): Result[uint64, string] = diff --git a/logos_delivery/waku/compat/option_valueor.nim b/logos_delivery/waku/compat/option_valueor.nim deleted file mode 100644 index 96a9276d5..000000000 --- a/logos_delivery/waku/compat/option_valueor.nim +++ /dev/null @@ -1,32 +0,0 @@ -## Polyfill: `valueOr` / `withValue` templates for `std/options.Option[T]`. -## -## Previously provided transitively by `libp2p/utility`, removed in -## nim-libp2p PR #2162 (commit 8a9943145). logos-delivery uses these -## templates pervasively on `Option[T]`. - -{.push raises: [].} - -import std/[macros, options] - -template valueOr*[T](self: Option[T], body: untyped): untyped = - let temp = (self) - if temp.isSome: - temp.get() - else: - body - -template withValue*[T](self: Option[T], value, body: untyped): untyped = - let temp = (self) - if temp.isSome: - let `value` {.inject.} = temp.get() - body - -macro withValue*[T](self: Option[T], value, body, elseStmt: untyped): untyped = - let elseBody = elseStmt[0] - quote: - let temp = (`self`) - if temp.isSome: - let `value` {.inject.} = temp.get() - `body` - else: - `elseBody` diff --git a/logos_delivery/waku/discovery/autonat_service.nim b/logos_delivery/waku/discovery/autonat_service.nim index 9f6ecaafd..b09efd49f 100644 --- a/logos_delivery/waku/discovery/autonat_service.nim +++ b/logos_delivery/waku/discovery/autonat_service.nim @@ -1,4 +1,4 @@ -import libp2p/crypto/crypto +import results, libp2p/crypto/crypto import chronos, chronicles, diff --git a/logos_delivery/waku/discovery/waku_discv5.nim b/logos_delivery/waku/discovery/waku_discv5.nim index 5f831730d..24fbffc83 100644 --- a/logos_delivery/waku/discovery/waku_discv5.nim +++ b/logos_delivery/waku/discovery/waku_discv5.nim @@ -1,10 +1,9 @@ import libp2p/crypto/crypto import libp2p/crypto/rng -import logos_delivery/waku/compat/option_valueor {.push raises: [].} import - std/[sequtils, strutils, options, sets, net, json], + std/[sequtils, strutils, sets, net, json], results, chronos, chronicles, @@ -40,7 +39,7 @@ type Discv5Conf* {.requiresInit.} = object enrAutoUpdate*: bool type WakuDiscoveryV5Config* = object - discv5Config*: Option[DiscoveryConfig] + discv5Config*: Opt[DiscoveryConfig] address*: IpAddress port*: Port privateKey*: eth_keys.PrivateKey @@ -56,21 +55,21 @@ type WakuDiscoveryV5* = ref object conf: WakuDiscoveryV5Config protocol*: protocol.Protocol listening*: bool - predicate: Option[WakuDiscv5Predicate] - peerManager: Option[PeerManager] + predicate: Opt[WakuDiscv5Predicate] + peerManager: Opt[PeerManager] topicSubscriptionQueue: AsyncEventQueue[SubscriptionEvent] proc shardingPredicate*( record: Record, bootnodes: seq[Record] = @[] -): Option[WakuDiscv5Predicate] = +): Opt[WakuDiscv5Predicate] = ## Filter peers based on relay sharding information let typedRecord = record.toTyped().valueOr: info "peer filtering failed", reason = error - return none(WakuDiscv5Predicate) + return Opt.none(WakuDiscv5Predicate) let nodeShard = typedRecord.relaySharding().valueOr: info "no relay sharding information, peer filtering disabled" - return none(WakuDiscv5Predicate) + return Opt.none(WakuDiscv5Predicate) info "peer filtering updated" @@ -81,14 +80,14 @@ proc shardingPredicate*( nodeShard.shardIds.anyIt(record.containsShard(nodeShard.clusterId, it)) ) #RFC 64 guideline - return some(predicate) + return Opt.some(predicate) proc new*( T: type WakuDiscoveryV5, rng: crypto.Rng, conf: WakuDiscoveryV5Config, - record: Option[waku_enr.Record], - peerManager: Option[PeerManager] = none(PeerManager), + record: Opt[waku_enr.Record], + peerManager: Opt[PeerManager] = Opt.none(PeerManager), queue: AsyncEventQueue[SubscriptionEvent] = newAsyncEventQueue[SubscriptionEvent](30), ): T = @@ -100,7 +99,7 @@ proc new*( privKey = conf.privateKey, bootstrapRecords = conf.bootstrapRecords, enrAutoUpdate = conf.autoupdateRecord, - previousRecord = record.toOpt(), + previousRecord = record, enrIp = Opt.none(IpAddress), enrTcpPort = Opt.none(Port), enrUdpPort = Opt.none(Port), @@ -110,7 +109,7 @@ proc new*( if record.isSome(): shardingPredicate(record.get(), conf.bootstrapRecords) else: - none(WakuDiscv5Predicate) + Opt.none(WakuDiscv5Predicate) WakuDiscoveryV5( conf: conf, @@ -221,7 +220,7 @@ proc logDiscv5FoundPeers(discoveredRecords: seq[waku_enr.Record]) = addrs = addrs, enr = recordUri, capabilities = capabilities, shards = shardsStr proc findRandomPeers*( - wd: WakuDiscoveryV5, overridePred = none(WakuDiscv5Predicate) + wd: WakuDiscoveryV5, overridePred = Opt.none(WakuDiscv5Predicate) ): Future[seq[waku_enr.Record]] {.async.} = ## Find random peers to connect to using Discovery v5 let discoveredNodes = await wd.protocol.queryRandom() @@ -445,7 +444,7 @@ proc setupDiscoveryV5*( let discv5UdpPort = conf.udpPort let discv5Conf = WakuDiscoveryV5Config( - discv5Config: some(discv5Config), + discv5Config: Opt.some(discv5Config), address: p2pListenAddress, port: discv5UdpPort, privateKey: eth_keys.PrivateKey(key.skkey), @@ -455,7 +454,11 @@ proc setupDiscoveryV5*( return ok( WakuDiscoveryV5.new( - rng, discv5Conf, some(myENR), some(nodePeerManager), nodeTopicSubscriptionQueue + rng, + discv5Conf, + Opt.some(myENR), + Opt.some(nodePeerManager), + nodeTopicSubscriptionQueue, ) ) diff --git a/logos_delivery/waku/discovery/waku_dnsdisc.nim b/logos_delivery/waku/discovery/waku_dnsdisc.nim index d0167de06..acd31c866 100644 --- a/logos_delivery/waku/discovery/waku_dnsdisc.nim +++ b/logos_delivery/waku/discovery/waku_dnsdisc.nim @@ -1,4 +1,3 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} ## A set of utilities to integrate EIP-1459 DNS-based discovery @@ -7,7 +6,7 @@ import logos_delivery/waku/compat/option_valueor ## EIP-1459 is defined in https://eips.ethereum.org/EIPS/eip-1459 import - std/[options, net, sequtils, sugar], + std/[net, sequtils, sugar], chronicles, chronos, metrics, diff --git a/logos_delivery/waku/discovery/waku_kademlia.nim b/logos_delivery/waku/discovery/waku_kademlia.nim index e6775530c..78ff31f65 100644 --- a/logos_delivery/waku/discovery/waku_kademlia.nim +++ b/logos_delivery/waku/discovery/waku_kademlia.nim @@ -1,7 +1,6 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} -import std/[options, sequtils, sets] +import std/[sequtils, sets] import chronos, chronicles, @@ -51,45 +50,45 @@ type KademliaDiscoveryConf* = object clientMode*: bool xprPublishing*: bool -proc extractMixPubKey*(service: ServiceInfo): Option[Curve25519Key] = +proc extractMixPubKey*(service: ServiceInfo): Opt[Curve25519Key] = if service.id != MixProtocolID: - return none(Curve25519Key) + return Opt.none(Curve25519Key) if service.data.len != Curve25519KeySize: trace "invalid mix pub key length", expected = Curve25519KeySize, actual = service.data.len, dataHex = byteutils.toHex(service.data) - return none(Curve25519Key) + return Opt.none(Curve25519Key) let key = intoCurve25519Key(service.data) - return some(key) + return Opt.some(key) -proc remotePeerInfoFrom*(record: ExtendedPeerRecord): Option[RemotePeerInfo] = +proc remotePeerInfoFrom*(record: ExtendedPeerRecord): Opt[RemotePeerInfo] = if record.addresses.len == 0: trace "missing addresses", peerId = record.peerId - return none(RemotePeerInfo) + return Opt.none(RemotePeerInfo) let addrs = record.addresses.mapIt(it.address) if addrs.len == 0: trace "no dialable addresses", peerId = record.peerId - return none(RemotePeerInfo) + return Opt.none(RemotePeerInfo) let protocols = record.services.mapIt(it.id) - var mixPubKey: Option[Curve25519Key] = none(Curve25519Key) + var mixPubKey: Opt[Curve25519Key] = Opt.none(Curve25519Key) for service in record.services: let key = extractMixPubKey(service).valueOr: continue - mixPubKey = some(key) + mixPubKey = Opt.some(key) trace "successfully extracted mix pub key", peerId = record.peerId, keyHex = byteutils.toHex(mixPubKey.get()) break - return some( + return Opt.some( RemotePeerInfo.init( record.peerId, addrs = addrs, diff --git a/logos_delivery/waku/factory/builder.nim b/logos_delivery/waku/factory/builder.nim index 3ca6313e0..a1e5a637b 100644 --- a/logos_delivery/waku/factory/builder.nim +++ b/logos_delivery/waku/factory/builder.nim @@ -1,7 +1,7 @@ {.push raises: [].} import - std/[options, net, math], + std/[net, math], results, chronicles, libp2p/crypto/crypto, @@ -23,14 +23,14 @@ import type WakuNodeBuilder* = object # General - nodeRng: Option[crypto.Rng] - nodeKey: Option[crypto.PrivateKey] - netConfig: Option[NetConfig] - record: Option[enr.Record] + nodeRng: Opt[crypto.Rng] + nodeKey: Opt[crypto.PrivateKey] + netConfig: Opt[NetConfig] + record: Opt[enr.Record] # Peer storage and peer manager - peerStorage: Option[PeerStorage] - peerStorageCapacity: Option[int] + peerStorage: Opt[PeerStorage] + peerStorageCapacity: Opt[int] # Peer manager config maxRelayPeers: int @@ -39,16 +39,16 @@ type shardAware: bool # Libp2p switch - switchMaxConnections: Option[int] - switchNameResolver: Option[NameResolver] - switchAgentString: Option[string] - switchSslSecureKey: Option[string] - switchSslSecureCert: Option[string] - switchSendSignedPeerRecord: Option[bool] + switchMaxConnections: Opt[int] + switchNameResolver: Opt[NameResolver] + switchAgentString: Opt[string] + switchSslSecureKey: Opt[string] + switchSslSecureCert: Opt[string] + switchSendSignedPeerRecord: Opt[bool] circuitRelay: Relay # Rate limit configs for non-relay req-resp protocols - rateLimitSettings: Option[ProtocolRateLimitSettings] + rateLimitSettings: Opt[ProtocolRateLimitSettings] WakuNodeBuilderResult* = Result[void, string] @@ -60,29 +60,29 @@ proc init*(T: type WakuNodeBuilder): WakuNodeBuilder = ## General proc withRng*(builder: var WakuNodeBuilder, rng: crypto.Rng) = - builder.nodeRng = some(rng) + builder.nodeRng = Opt.some(rng) proc withNodeKey*(builder: var WakuNodeBuilder, nodeKey: crypto.PrivateKey) = - builder.nodeKey = some(nodeKey) + builder.nodeKey = Opt.some(nodeKey) proc withRecord*(builder: var WakuNodeBuilder, record: enr.Record) = - builder.record = some(record) + builder.record = Opt.some(record) proc withNetworkConfiguration*(builder: var WakuNodeBuilder, config: NetConfig) = - builder.netConfig = some(config) + builder.netConfig = Opt.some(config) proc withNetworkConfigurationDetails*( builder: var WakuNodeBuilder, bindIp: IpAddress, bindPort: Port, - extIp = none(IpAddress), - extPort = none(Port), + extIp = Opt.none(IpAddress), + extPort = Opt.none(Port), extMultiAddrs = newSeq[MultiAddress](), wsBindPort: Port = Port(8000), wsEnabled: bool = false, wssEnabled: bool = false, - wakuFlags = none(CapabilitiesBitfield), - dns4DomainName = none(string), + wakuFlags = Opt.none(CapabilitiesBitfield), + dns4DomainName = Opt.none(string), dnsNameServers = @[parseIpAddress("1.1.1.1"), parseIpAddress("1.0.0.1")], ): WakuNodeBuilderResult {. deprecated: "use 'builder.withNetworkConfiguration()' instead" @@ -93,7 +93,7 @@ proc withNetworkConfigurationDetails*( extIp = extIp, extPort = extPort, extMultiAddrs = extMultiAddrs, - wsBindPort = some(wsBindPort), + wsBindPort = Opt.some(wsBindPort), wsEnabled = wsEnabled, wssEnabled = wssEnabled, wakuFlags = wakuFlags, @@ -106,10 +106,10 @@ proc withNetworkConfigurationDetails*( ## Peer storage and peer manager proc withPeerStorage*( - builder: var WakuNodeBuilder, peerStorage: PeerStorage, capacity = none(int) + builder: var WakuNodeBuilder, peerStorage: PeerStorage, capacity = Opt.none(int) ) = if not peerStorage.isNil(): - builder.peerStorage = some(peerStorage) + builder.peerStorage = Opt.some(peerStorage) builder.peerStorageCapacity = capacity @@ -131,7 +131,7 @@ proc withColocationLimit*(builder: var WakuNodeBuilder, colocationLimit: int) = builder.colocationLimit = colocationLimit proc withRateLimit*(builder: var WakuNodeBuilder, limits: ProtocolRateLimitSettings) = - builder.rateLimitSettings = some(limits) + builder.rateLimitSettings = Opt.some(limits) proc withCircuitRelay*(builder: var WakuNodeBuilder, circuitRelay: Relay) = builder.circuitRelay = circuitRelay @@ -140,21 +140,21 @@ proc withCircuitRelay*(builder: var WakuNodeBuilder, circuitRelay: Relay) = proc withSwitchConfiguration*( builder: var WakuNodeBuilder, - maxConnections = none(int), + maxConnections = Opt.none(int), nameResolver: NameResolver = nil, sendSignedPeerRecord = false, - secureKey = none(string), - secureCert = none(string), - agentString = none(string), + secureKey = Opt.none(string), + secureCert = Opt.none(string), + agentString = Opt.none(string), ) = builder.switchMaxConnections = maxConnections - builder.switchSendSignedPeerRecord = some(sendSignedPeerRecord) + builder.switchSendSignedPeerRecord = Opt.some(sendSignedPeerRecord) builder.switchSslSecureKey = secureKey builder.switchSslSecureCert = secureCert builder.switchAgentString = agentString if not nameResolver.isNil(): - builder.switchNameResolver = some(nameResolver) + builder.switchNameResolver = Opt.some(nameResolver) ## Build @@ -209,8 +209,8 @@ proc build*(builder: WakuNodeBuilder): Result[WakuNode, string] = let peerManager = PeerManager.new( switch = switch, storage = builder.peerStorage.get(nil), - maxRelayPeers = some(builder.maxRelayPeers), - maxServicePeers = some(builder.maxServicePeers), + maxRelayPeers = Opt.some(builder.maxRelayPeers), + maxServicePeers = Opt.some(builder.maxServicePeers), colocationLimit = builder.colocationLimit, shardedPeerManagement = builder.shardAware, maxConnections = builder.switchMaxConnections.get(MaxConnections), diff --git a/logos_delivery/waku/factory/conf_builder/discv5_conf_builder.nim b/logos_delivery/waku/factory/conf_builder/discv5_conf_builder.nim index e28cb10fb..e5965101f 100644 --- a/logos_delivery/waku/factory/conf_builder/discv5_conf_builder.nim +++ b/logos_delivery/waku/factory/conf_builder/discv5_conf_builder.nim @@ -1,4 +1,4 @@ -import chronicles, std/[net, options, sequtils], results +import chronicles, std/[net, sequtils], results import ../waku_conf logScope: @@ -16,49 +16,49 @@ const ## Discv5 Config Builder ## ########################### type Discv5ConfBuilder* = object - enabled*: Option[bool] + enabled*: Opt[bool] bootstrapNodes*: seq[string] - bitsPerHop*: Option[int] - bucketIpLimit*: Option[uint] - enrAutoUpdate*: Option[bool] - tableIpLimit*: Option[uint] - udpPort*: Option[Port] + bitsPerHop*: Opt[int] + bucketIpLimit*: Opt[uint] + enrAutoUpdate*: Opt[bool] + tableIpLimit*: Opt[uint] + udpPort*: Opt[Port] proc init*(T: type Discv5ConfBuilder): Discv5ConfBuilder = Discv5ConfBuilder() proc withEnabled*(b: var Discv5ConfBuilder, enabled: bool) = - b.enabled = some(enabled) + b.enabled = Opt.some(enabled) proc withBitsPerHop*(b: var Discv5ConfBuilder, bitsPerHop: int) = - b.bitsPerHop = some(bitsPerHop) + b.bitsPerHop = Opt.some(bitsPerHop) proc withBucketIpLimit*(b: var Discv5ConfBuilder, bucketIpLimit: uint) = - b.bucketIpLimit = some(bucketIpLimit) + b.bucketIpLimit = Opt.some(bucketIpLimit) proc withEnrAutoUpdate*(b: var Discv5ConfBuilder, enrAutoUpdate: bool) = - b.enrAutoUpdate = some(enrAutoUpdate) + b.enrAutoUpdate = Opt.some(enrAutoUpdate) proc withTableIpLimit*(b: var Discv5ConfBuilder, tableIpLimit: uint) = - b.tableIpLimit = some(tableIpLimit) + b.tableIpLimit = Opt.some(tableIpLimit) proc withUdpPort*(b: var Discv5ConfBuilder, udpPort: Port) = - b.udpPort = some(udpPort) + b.udpPort = Opt.some(udpPort) proc withUdpPort*(b: var Discv5ConfBuilder, udpPort: uint16) = - b.udpPort = some(Port(udpPort)) + b.udpPort = Opt.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] = +proc build*(b: Discv5ConfBuilder): Result[Opt[Discv5Conf], string] = if not b.enabled.get(DefaultDiscv5Enabled): - return ok(none(Discv5Conf)) + return ok(Opt.none(Discv5Conf)) return ok( - some( + Opt.some( Discv5Conf( bootstrapNodes: b.bootstrapNodes, bitsPerHop: b.bitsPerHop.get(DefaultDiscv5BitsPerHop), diff --git a/logos_delivery/waku/factory/conf_builder/dns_discovery_conf_builder.nim b/logos_delivery/waku/factory/conf_builder/dns_discovery_conf_builder.nim index 1c577bbf8..4ae8570a1 100644 --- a/logos_delivery/waku/factory/conf_builder/dns_discovery_conf_builder.nim +++ b/logos_delivery/waku/factory/conf_builder/dns_discovery_conf_builder.nim @@ -1,4 +1,4 @@ -import chronicles, std/[net, options, strutils], results +import chronicles, std/[net, strutils], results import ../waku_conf logScope: @@ -8,21 +8,21 @@ logScope: ## DNS Discovery Config Builder ## ################################## type DnsDiscoveryConfBuilder* = object - enrTreeUrl*: Option[string] + enrTreeUrl*: Opt[string] nameServers*: seq[IpAddress] proc init*(T: type DnsDiscoveryConfBuilder): DnsDiscoveryConfBuilder = DnsDiscoveryConfBuilder() proc withEnrTreeUrl*(b: var DnsDiscoveryConfBuilder, enrTreeUrl: string) = - b.enrTreeUrl = some(enrTreeUrl) + b.enrTreeUrl = Opt.some(enrTreeUrl) proc withNameServers*(b: var DnsDiscoveryConfBuilder, nameServers: seq[IpAddress]) = b.nameServers = nameServers -proc build*(b: DnsDiscoveryConfBuilder): Result[Option[DnsDiscoveryConf], string] = +proc build*(b: DnsDiscoveryConfBuilder): Result[Opt[DnsDiscoveryConf], string] = if b.enrTreeUrl.isNone(): - return ok(none(DnsDiscoveryConf)) + return ok(Opt.none(DnsDiscoveryConf)) if isEmptyOrWhiteSpace(b.enrTreeUrl.get()): return err("dnsDiscovery.enrTreeUrl cannot be an empty string") @@ -30,5 +30,7 @@ proc build*(b: DnsDiscoveryConfBuilder): Result[Option[DnsDiscoveryConf], string return err("dnsDiscovery.nameServers is not specified") return ok( - some(DnsDiscoveryConf(nameServers: b.nameServers, enrTreeUrl: b.enrTreeUrl.get())) + Opt.some( + DnsDiscoveryConf(nameServers: b.nameServers, enrTreeUrl: b.enrTreeUrl.get()) + ) ) diff --git a/logos_delivery/waku/factory/conf_builder/filter_service_conf_builder.nim b/logos_delivery/waku/factory/conf_builder/filter_service_conf_builder.nim index dafd6b5ab..4f063627a 100644 --- a/logos_delivery/waku/factory/conf_builder/filter_service_conf_builder.nim +++ b/logos_delivery/waku/factory/conf_builder/filter_service_conf_builder.nim @@ -1,4 +1,4 @@ -import chronicles, std/options, results +import chronicles, results import ../waku_conf logScope: @@ -14,40 +14,40 @@ const ## Filter Service Config Builder ## ################################### type FilterServiceConfBuilder* = object - enabled*: Option[bool] - maxPeersToServe*: Option[uint32] - subscriptionTimeout*: Option[uint16] - maxCriteria*: Option[uint32] + enabled*: Opt[bool] + maxPeersToServe*: Opt[uint32] + subscriptionTimeout*: Opt[uint16] + maxCriteria*: Opt[uint32] proc init*(T: type FilterServiceConfBuilder): FilterServiceConfBuilder = FilterServiceConfBuilder() proc withEnabled*(b: var FilterServiceConfBuilder, enabled: bool) = - b.enabled = some(enabled) + b.enabled = Opt.some(enabled) proc withMaxPeersToServe*(b: var FilterServiceConfBuilder, maxPeersToServe: uint32) = - b.maxPeersToServe = some(maxPeersToServe) + b.maxPeersToServe = Opt.some(maxPeersToServe) proc withMaxPeersToServeIfNotAssigned*( b: var FilterServiceConfBuilder, maxPeersToServe: uint32 ) = if b.maxPeersToServe.isNone(): - b.maxPeersToServe = some(maxPeersToServe) + b.maxPeersToServe = Opt.some(maxPeersToServe) proc withSubscriptionTimeout*( b: var FilterServiceConfBuilder, subscriptionTimeout: uint16 ) = - b.subscriptionTimeout = some(subscriptionTimeout) + b.subscriptionTimeout = Opt.some(subscriptionTimeout) proc withMaxCriteria*(b: var FilterServiceConfBuilder, maxCriteria: uint32) = - b.maxCriteria = some(maxCriteria) + b.maxCriteria = Opt.some(maxCriteria) -proc build*(b: FilterServiceConfBuilder): Result[Option[FilterServiceConf], string] = +proc build*(b: FilterServiceConfBuilder): Result[Opt[FilterServiceConf], string] = if not b.enabled.get(DefaultFilterEnabled): - return ok(none(FilterServiceConf)) + return ok(Opt.none(FilterServiceConf)) return ok( - some( + Opt.some( FilterServiceConf( maxPeersToServe: b.maxPeersToServe.get(DefaultFilterMaxPeersToServe), subscriptionTimeout: b.subscriptionTimeout.get(DefaultFilterSubscriptionTimeout), diff --git a/logos_delivery/waku/factory/conf_builder/kademlia_discovery_conf_builder.nim b/logos_delivery/waku/factory/conf_builder/kademlia_discovery_conf_builder.nim index 2810815c6..95e0c368d 100644 --- a/logos_delivery/waku/factory/conf_builder/kademlia_discovery_conf_builder.nim +++ b/logos_delivery/waku/factory/conf_builder/kademlia_discovery_conf_builder.nim @@ -1,6 +1,4 @@ -import logos_delivery/waku/compat/option_valueor -import chronicles, std/options, results -import logos_delivery/waku/discovery/waku_kademlia +import chronicles, results, logos_delivery/waku/discovery/waku_kademlia import chronos import libp2p/[peerid, multiaddress, peerinfo] import libp2p/protocols/kademlia/types @@ -15,16 +13,16 @@ const DefaultServiceLookupInterval* = chronos.seconds(60) type KademliaDiscoveryConfBuilder* = object - enabled*: Option[bool] + enabled*: Opt[bool] bootstrapNodes*: seq[string] - randomLookupInterval*: Option[Duration] - serviceLookupInterval*: Option[Duration] + randomLookupInterval*: Opt[Duration] + serviceLookupInterval*: Opt[Duration] proc init*(T: type KademliaDiscoveryConfBuilder): KademliaDiscoveryConfBuilder = KademliaDiscoveryConfBuilder() proc withEnabled*(b: var KademliaDiscoveryConfBuilder, enabled: bool) = - b.enabled = some(enabled) + b.enabled = Opt.some(enabled) proc withBootstrapNodes*( b: var KademliaDiscoveryConfBuilder, bootstrapNodes: seq[string] @@ -34,22 +32,22 @@ proc withBootstrapNodes*( proc withRandomLookupInterval*( b: var KademliaDiscoveryConfBuilder, interval: Duration ) = - b.randomLookupInterval = some(interval) + b.randomLookupInterval = Opt.some(interval) proc withServiceLookupInterval*( b: var KademliaDiscoveryConfBuilder, interval: Duration ) = - b.serviceLookupInterval = some(interval) + b.serviceLookupInterval = Opt.some(interval) proc build*( b: KademliaDiscoveryConfBuilder -): Result[Option[KademliaDiscoveryConf], string] = +): Result[Opt[KademliaDiscoveryConf], string] = # Explicit disable wins: enabled=false disables regardless of bootstrap nodes. - if b.enabled == some(false): - return ok(none(KademliaDiscoveryConf)) + if b.enabled == Opt.some(false): + return ok(Opt.none(KademliaDiscoveryConf)) # Otherwise enabled if config-enabled or any bootstrap nodes are provided. if not b.enabled.get(DefaultKadEnabled) and b.bootstrapNodes.len == 0: - return ok(none(KademliaDiscoveryConf)) + return ok(Opt.none(KademliaDiscoveryConf)) var parsedNodes: seq[(PeerId, seq[MultiAddress])] for nodeStr in b.bootstrapNodes: @@ -58,7 +56,7 @@ proc build*( parsedNodes.add((peerId, @[ma])) return ok( - some( + Opt.some( KademliaDiscoveryConf( bootstrapNodes: parsedNodes, randomLookupInterval: b.randomLookupInterval.get(DefaultRandomLookupInterval), diff --git a/logos_delivery/waku/factory/conf_builder/metrics_server_conf_builder.nim b/logos_delivery/waku/factory/conf_builder/metrics_server_conf_builder.nim index ec3245f97..b1bf150aa 100644 --- a/logos_delivery/waku/factory/conf_builder/metrics_server_conf_builder.nim +++ b/logos_delivery/waku/factory/conf_builder/metrics_server_conf_builder.nim @@ -1,4 +1,4 @@ -import chronicles, std/[net, options], results +import chronicles, std/net, results import ../waku_conf logScope: @@ -14,36 +14,36 @@ const ## Metrics Server Config Builder ## ################################### type MetricsServerConfBuilder* = object - enabled*: Option[bool] + enabled*: Opt[bool] - httpAddress*: Option[IpAddress] - httpPort*: Option[Port] - logging*: Option[bool] + httpAddress*: Opt[IpAddress] + httpPort*: Opt[Port] + logging*: Opt[bool] proc init*(T: type MetricsServerConfBuilder): MetricsServerConfBuilder = MetricsServerConfBuilder() proc withEnabled*(b: var MetricsServerConfBuilder, enabled: bool) = - b.enabled = some(enabled) + b.enabled = Opt.some(enabled) proc withHttpAddress*(b: var MetricsServerConfBuilder, httpAddress: IpAddress) = - b.httpAddress = some(httpAddress) + b.httpAddress = Opt.some(httpAddress) proc withHttpPort*(b: var MetricsServerConfBuilder, httpPort: Port) = - b.httpPort = some(httpPort) + b.httpPort = Opt.some(httpPort) proc withHttpPort*(b: var MetricsServerConfBuilder, httpPort: uint16) = - b.httpPort = some(Port(httpPort)) + b.httpPort = Opt.some(Port(httpPort)) proc withLogging*(b: var MetricsServerConfBuilder, logging: bool) = - b.logging = some(logging) + b.logging = Opt.some(logging) -proc build*(b: MetricsServerConfBuilder): Result[Option[MetricsServerConf], string] = +proc build*(b: MetricsServerConfBuilder): Result[Opt[MetricsServerConf], string] = if not b.enabled.get(DefaultMetricsEnabled): - return ok(none(MetricsServerConf)) + return ok(Opt.none(MetricsServerConf)) return ok( - some( + Opt.some( MetricsServerConf( httpAddress: b.httpAddress.get(DefaultMetricsHttpAddress), httpPort: b.httpPort.get(DefaultMetricsHttpPort), diff --git a/logos_delivery/waku/factory/conf_builder/mix_conf_builder.nim b/logos_delivery/waku/factory/conf_builder/mix_conf_builder.nim index fb2b17dde..70e3aeeef 100644 --- a/logos_delivery/waku/factory/conf_builder/mix_conf_builder.nim +++ b/logos_delivery/waku/factory/conf_builder/mix_conf_builder.nim @@ -1,6 +1,9 @@ -import logos_delivery/waku/compat/option_valueor -import chronicles, std/options, results -import libp2p/crypto/crypto, libp2p/crypto/curve25519, libp2p_mix/curve25519 +import + chronicles, + results, + libp2p/crypto/crypto, + libp2p/crypto/curve25519, + libp2p_mix/curve25519 import ../waku_conf, logos_delivery/waku/waku_mix logScope: @@ -12,35 +15,39 @@ const DefaultMixEnabled: bool = false ## Mix Config Builder ## ################################## type MixConfBuilder* = object - enabled: Option[bool] - mixKey: Option[string] + enabled: Opt[bool] + mixKey: Opt[string] mixNodes: seq[MixNodePubInfo] proc init*(T: type MixConfBuilder): MixConfBuilder = MixConfBuilder() proc withEnabled*(b: var MixConfBuilder, enabled: bool) = - b.enabled = some(enabled) + b.enabled = Opt.some(enabled) proc withMixKey*(b: var MixConfBuilder, mixKey: string) = - b.mixKey = some(mixKey) + b.mixKey = Opt.some(mixKey) proc withMixNodes*(b: var MixConfBuilder, mixNodes: seq[MixNodePubInfo]) = b.mixNodes = mixNodes -proc build*(b: MixConfBuilder): Result[Option[MixConf], string] = +proc build*(b: MixConfBuilder): Result[Opt[MixConf], string] = if not b.enabled.get(DefaultMixEnabled): - return ok(none[MixConf]()) + return ok(Opt.none(MixConf)) else: if b.mixKey.isSome(): let mixPrivKey = intoCurve25519Key(ncrutils.fromHex(b.mixKey.get())) let mixPubKey = public(mixPrivKey) return ok( - some(MixConf(mixKey: mixPrivKey, mixPubKey: mixPubKey, mixNodes: b.mixNodes)) + Opt.some( + MixConf(mixKey: mixPrivKey, mixPubKey: mixPubKey, mixNodes: b.mixNodes) + ) ) else: let (mixPrivKey, mixPubKey) = generateKeyPair().valueOr: return err("Generate key pair error: " & $error) return ok( - some(MixConf(mixKey: mixPrivKey, mixPubKey: mixPubKey, mixNodes: b.mixNodes)) + Opt.some( + MixConf(mixKey: mixPrivKey, mixPubKey: mixPubKey, mixNodes: b.mixNodes) + ) ) diff --git a/logos_delivery/waku/factory/conf_builder/quic_conf_builder.nim b/logos_delivery/waku/factory/conf_builder/quic_conf_builder.nim index 8233b1581..460b5577f 100644 --- a/logos_delivery/waku/factory/conf_builder/quic_conf_builder.nim +++ b/logos_delivery/waku/factory/conf_builder/quic_conf_builder.nim @@ -1,4 +1,4 @@ -import chronicles, std/[net, options], results +import chronicles, std/net, results import logos_delivery/waku/factory/waku_conf logScope: @@ -11,23 +11,23 @@ const DefaultQuicPort*: Port = Port(60000) ## QUIC Config Builder ## ######################### type QuicConfBuilder* = object - enabled*: Option[bool] - quicPort*: Option[Port] + enabled*: Opt[bool] + quicPort*: Opt[Port] proc init*(T: type QuicConfBuilder): QuicConfBuilder = QuicConfBuilder() proc withEnabled*(b: var QuicConfBuilder, enabled: bool) = - b.enabled = some(enabled) + b.enabled = Opt.some(enabled) proc withQuicPort*(b: var QuicConfBuilder, quicPort: Port) = - b.quicPort = some(quicPort) + b.quicPort = Opt.some(quicPort) proc withQuicPort*(b: var QuicConfBuilder, quicPort: uint16) = - b.quicPort = some(Port(quicPort)) + b.quicPort = Opt.some(Port(quicPort)) -proc build*(b: QuicConfBuilder): Result[Option[QuicConf], string] = +proc build*(b: QuicConfBuilder): Result[Opt[QuicConf], string] = if not b.enabled.get(false): - return ok(none(QuicConf)) + return ok(Opt.none(QuicConf)) - return ok(some(QuicConf(port: b.quicPort.get(DefaultQuicPort)))) + return ok(Opt.some(QuicConf(port: b.quicPort.get(DefaultQuicPort)))) diff --git a/logos_delivery/waku/factory/conf_builder/rate_limit_conf_builder.nim b/logos_delivery/waku/factory/conf_builder/rate_limit_conf_builder.nim index e4a6d260b..204974580 100644 --- a/logos_delivery/waku/factory/conf_builder/rate_limit_conf_builder.nim +++ b/logos_delivery/waku/factory/conf_builder/rate_limit_conf_builder.nim @@ -1,25 +1,23 @@ -import logos_delivery/waku/compat/option_valueor -import chronicles, std/[net, options], results -import logos_delivery/waku/common/rate_limit/setting +import chronicles, std/net, results, logos_delivery/waku/common/rate_limit/setting logScope: topics = "waku conf builder rate limit" type RateLimitConfBuilder* = object - strValue: Option[seq[string]] - objValue: Option[ProtocolRateLimitSettings] + strValue: Opt[seq[string]] + objValue: Opt[ProtocolRateLimitSettings] proc init*(T: type RateLimitConfBuilder): RateLimitConfBuilder = RateLimitConfBuilder() proc withRateLimits*(b: var RateLimitConfBuilder, rateLimits: seq[string]) = - b.strValue = some(rateLimits) + b.strValue = Opt.some(rateLimits) proc withRateLimitsIfNotAssigned*( b: var RateLimitConfBuilder, rateLimits: seq[string] ) = if b.strValue.isNone() or b.strValue.get().len == 0: - b.strValue = some(rateLimits) + b.strValue = Opt.some(rateLimits) proc build*(b: RateLimitConfBuilder): Result[ProtocolRateLimitSettings, string] = if b.strValue.isSome() and b.objValue.isSome(): diff --git a/logos_delivery/waku/factory/conf_builder/rest_server_conf_builder.nim b/logos_delivery/waku/factory/conf_builder/rest_server_conf_builder.nim index 1bf7d17ff..eed1cc532 100644 --- a/logos_delivery/waku/factory/conf_builder/rest_server_conf_builder.nim +++ b/logos_delivery/waku/factory/conf_builder/rest_server_conf_builder.nim @@ -1,4 +1,4 @@ -import chronicles, std/[net, options, sequtils], results +import chronicles, std/[net, sequtils], results import ../waku_conf logScope: @@ -13,41 +13,41 @@ const ## REST Server Config Builder ## ################################ type RestServerConfBuilder* = object - enabled*: Option[bool] + enabled*: Opt[bool] allowOrigin*: seq[string] - listenAddress*: Option[IpAddress] - port*: Option[Port] - admin*: Option[bool] - relayCacheCapacity*: Option[uint32] + listenAddress*: Opt[IpAddress] + port*: Opt[Port] + admin*: Opt[bool] + relayCacheCapacity*: Opt[uint32] proc init*(T: type RestServerConfBuilder): RestServerConfBuilder = RestServerConfBuilder() proc withEnabled*(b: var RestServerConfBuilder, enabled: bool) = - b.enabled = some(enabled) + b.enabled = Opt.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) + b.listenAddress = Opt.some(listenAddress) proc withPort*(b: var RestServerConfBuilder, port: Port) = - b.port = some(port) + b.port = Opt.some(port) proc withPort*(b: var RestServerConfBuilder, port: uint16) = - b.port = some(Port(port)) + b.port = Opt.some(Port(port)) proc withAdmin*(b: var RestServerConfBuilder, admin: bool) = - b.admin = some(admin) + b.admin = Opt.some(admin) proc withRelayCacheCapacity*(b: var RestServerConfBuilder, relayCacheCapacity: uint32) = - b.relayCacheCapacity = some(relayCacheCapacity) + b.relayCacheCapacity = Opt.some(relayCacheCapacity) -proc build*(b: RestServerConfBuilder): Result[Option[RestServerConf], string] = +proc build*(b: RestServerConfBuilder): Result[Opt[RestServerConf], string] = if not b.enabled.get(DefaultRestEnabled): - return ok(none(RestServerConf)) + return ok(Opt.none(RestServerConf)) if b.listenAddress.isNone(): return err("restServer.listenAddress is not specified") @@ -55,7 +55,7 @@ proc build*(b: RestServerConfBuilder): Result[Option[RestServerConf], string] = return err("restServer.relayCacheCapacity is not specified") return ok( - some( + Opt.some( RestServerConf( allowOrigin: b.allowOrigin, listenAddress: b.listenAddress.get(), diff --git a/logos_delivery/waku/factory/conf_builder/rln_relay_conf_builder.nim b/logos_delivery/waku/factory/conf_builder/rln_relay_conf_builder.nim index 8835f4c66..5aad2e7ee 100644 --- a/logos_delivery/waku/factory/conf_builder/rln_relay_conf_builder.nim +++ b/logos_delivery/waku/factory/conf_builder/rln_relay_conf_builder.nim @@ -1,4 +1,4 @@ -import chronicles, std/options, results, stint, stew/endians2 +import chronicles, results, stint, stew/endians2 import ../waku_conf logScope: @@ -13,69 +13,69 @@ const ## RLN Relay Config Builder ## ############################## type RlnConfBuilder* = object - enabled*: Option[bool] - chainId*: Option[UInt256] - ethClientUrls*: Option[seq[string]] - ethContractAddress*: Option[string] - credIndex*: Option[uint] - credPassword*: Option[string] - credPath*: Option[string] - dynamic*: Option[bool] - epochSizeSec*: Option[uint64] - userMessageLimit*: Option[uint64] + enabled*: Opt[bool] + chainId*: Opt[UInt256] + ethClientUrls*: Opt[seq[string]] + ethContractAddress*: Opt[string] + credIndex*: Opt[uint] + credPassword*: Opt[string] + credPath*: Opt[string] + dynamic*: Opt[bool] + epochSizeSec*: Opt[uint64] + userMessageLimit*: Opt[uint64] proc init*(T: type RlnConfBuilder): RlnConfBuilder = RlnConfBuilder() proc withEnabled*(b: var RlnConfBuilder, enabled: bool) = - b.enabled = some(enabled) + b.enabled = Opt.some(enabled) proc withChainId*(b: var RlnConfBuilder, chainId: uint | UInt256) = when chainId is uint: - b.chainId = some(UInt256.fromBytesBE(chainId.toBytesBE())) + b.chainId = Opt.some(UInt256.fromBytesBE(chainId.toBytesBE())) else: - b.chainId = some(chainId) + b.chainId = Opt.some(chainId) proc withCredIndex*(b: var RlnConfBuilder, credIndex: uint) = - b.credIndex = some(credIndex) + b.credIndex = Opt.some(credIndex) proc withCredPassword*(b: var RlnConfBuilder, credPassword: string) = - b.credPassword = some(credPassword) + b.credPassword = Opt.some(credPassword) proc withCredPath*(b: var RlnConfBuilder, credPath: string) = - b.credPath = some(credPath) + b.credPath = Opt.some(credPath) proc withDynamic*(b: var RlnConfBuilder, dynamic: bool) = - b.dynamic = some(dynamic) + b.dynamic = Opt.some(dynamic) proc withEthClientUrls*(b: var RlnConfBuilder, ethClientUrls: seq[string]) = - b.ethClientUrls = some(ethClientUrls) + b.ethClientUrls = Opt.some(ethClientUrls) proc withEthContractAddress*(b: var RlnConfBuilder, ethContractAddress: string) = - b.ethContractAddress = some(ethContractAddress) + b.ethContractAddress = Opt.some(ethContractAddress) proc withEpochSizeSec*(b: var RlnConfBuilder, epochSizeSec: uint64) = - b.epochSizeSec = some(epochSizeSec) + b.epochSizeSec = Opt.some(epochSizeSec) proc withUserMessageLimit*(b: var RlnConfBuilder, userMessageLimit: uint64) = - b.userMessageLimit = some(userMessageLimit) + b.userMessageLimit = Opt.some(userMessageLimit) -proc build*(b: RlnConfBuilder): Result[Option[RlnConf], string] = +proc build*(b: RlnConfBuilder): Result[Opt[RlnConf], string] = if not b.enabled.get(DefaultRlnRelayEnabled): - return ok(none(RlnConf)) + return ok(Opt.none(RlnConf)) if b.chainId.isNone(): return err("RLN Relay Chain Id is not specified") let creds = if b.credPath.isSome() and b.credPassword.isSome(): - some(RlnCreds(path: b.credPath.get(), password: b.credPassword.get())) + Opt.some(RlnCreds(path: b.credPath.get(), password: b.credPassword.get())) elif b.credPath.isSome() and b.credPassword.isNone(): return err("RLN Relay Credential Password is not specified but path is") elif b.credPath.isNone() and b.credPassword.isSome(): return err("RLN Relay Credential Path is not specified but password is") else: - none(RlnCreds) + Opt.none(RlnCreds) if b.dynamic.isNone(): return err("rlnRelay.dynamic is not specified") @@ -84,7 +84,7 @@ proc build*(b: RlnConfBuilder): Result[Option[RlnConf], string] = if b.ethContractAddress.get("") == "": return err("rlnRelay.ethContractAddress is not specified") return ok( - some( + Opt.some( RlnConf( chainId: b.chainId.get(), credIndex: b.credIndex, diff --git a/logos_delivery/waku/factory/conf_builder/store_service_conf_builder.nim b/logos_delivery/waku/factory/conf_builder/store_service_conf_builder.nim index 20507e7d0..abb37e7b8 100644 --- a/logos_delivery/waku/factory/conf_builder/store_service_conf_builder.nim +++ b/logos_delivery/waku/factory/conf_builder/store_service_conf_builder.nim @@ -1,6 +1,4 @@ -import logos_delivery/waku/compat/option_valueor -import std/[options, strutils, sequtils] -import chronicles, results, chronos +import std/[strutils, sequtils], chronicles, results, chronos import ../waku_conf, ./store_sync_conf_builder logScope: @@ -18,35 +16,35 @@ const ## Store Service Config Builder ## ################################## type StoreServiceConfBuilder* = object - enabled*: Option[bool] + enabled*: Opt[bool] - dbMigration*: Option[bool] - dbURl*: Option[string] - dbVacuum*: Option[bool] - maxNumDbConnections*: Option[int] + dbMigration*: Opt[bool] + dbURl*: Opt[string] + dbVacuum*: Opt[bool] + maxNumDbConnections*: Opt[int] retentionPolicies*: seq[string] - resume*: Option[bool] + resume*: Opt[bool] storeSyncConf*: StoreSyncConfBuilder proc init*(T: type StoreServiceConfBuilder): StoreServiceConfBuilder = StoreServiceConfBuilder(storeSyncConf: StoreSyncConfBuilder.init()) proc withEnabled*(b: var StoreServiceConfBuilder, enabled: bool) = - b.enabled = some(enabled) + b.enabled = Opt.some(enabled) proc withDbMigration*(b: var StoreServiceConfBuilder, dbMigration: bool) = - b.dbMigration = some(dbMigration) + b.dbMigration = Opt.some(dbMigration) proc withDbUrl*(b: var StoreServiceConfBuilder, dbUrl: string) = - b.dbURl = some(dbUrl) + b.dbURl = Opt.some(dbUrl) proc withDbVacuum*(b: var StoreServiceConfBuilder, dbVacuum: bool) = - b.dbVacuum = some(dbVacuum) + b.dbVacuum = Opt.some(dbVacuum) proc withMaxNumDbConnections*( b: var StoreServiceConfBuilder, maxNumDbConnections: int ) = - b.maxNumDbConnections = some(maxNumDbConnections) + b.maxNumDbConnections = Opt.some(maxNumDbConnections) proc withRetentionPolicies*(b: var StoreServiceConfBuilder, retentionPolicies: string) = b.retentionPolicies = retentionPolicies @@ -56,7 +54,7 @@ proc withRetentionPolicies*(b: var StoreServiceConfBuilder, retentionPolicies: s .filterIt(it.len > 0) proc withResume*(b: var StoreServiceConfBuilder, resume: bool) = - b.resume = some(resume) + b.resume = Opt.some(resume) const ValidRetentionPolicyTypes = ["time", "capacity", "size"] @@ -85,9 +83,9 @@ proc validateRetentionPolicies(policies: seq[string]): Result[void, string] = return ok() -proc build*(b: StoreServiceConfBuilder): Result[Option[StoreServiceConf], string] = +proc build*(b: StoreServiceConfBuilder): Result[Opt[StoreServiceConf], string] = if not b.enabled.get(DefaultStoreEnabled): - return ok(none(StoreServiceConf)) + return ok(Opt.none(StoreServiceConf)) if b.dbUrl.get("") == "": return err "store.dbUrl is not specified" @@ -104,7 +102,7 @@ proc build*(b: StoreServiceConfBuilder): Result[Option[StoreServiceConf], string b.retentionPolicies return ok( - some( + Opt.some( StoreServiceConf( dbMigration: b.dbMigration.get(DefaultStoreDbMigration), dbURl: b.dbUrl.get(), diff --git a/logos_delivery/waku/factory/conf_builder/store_sync_conf_builder.nim b/logos_delivery/waku/factory/conf_builder/store_sync_conf_builder.nim index 74cbcece0..dca53ab71 100644 --- a/logos_delivery/waku/factory/conf_builder/store_sync_conf_builder.nim +++ b/logos_delivery/waku/factory/conf_builder/store_sync_conf_builder.nim @@ -1,4 +1,4 @@ -import chronicles, std/options, results +import chronicles, results import ../waku_conf logScope: @@ -10,30 +10,30 @@ const DefaultStoreSyncEnabled: bool = false ## Store Sync Config Builder ## ################################## type StoreSyncConfBuilder* = object - enabled*: Option[bool] + enabled*: Opt[bool] - rangeSec*: Option[uint32] - intervalSec*: Option[uint32] - relayJitterSec*: Option[uint32] + rangeSec*: Opt[uint32] + intervalSec*: Opt[uint32] + relayJitterSec*: Opt[uint32] proc init*(T: type StoreSyncConfBuilder): StoreSyncConfBuilder = StoreSyncConfBuilder() proc withEnabled*(b: var StoreSyncConfBuilder, enabled: bool) = - b.enabled = some(enabled) + b.enabled = Opt.some(enabled) proc withRangeSec*(b: var StoreSyncConfBuilder, rangeSec: uint32) = - b.rangeSec = some(rangeSec) + b.rangeSec = Opt.some(rangeSec) proc withIntervalSec*(b: var StoreSyncConfBuilder, intervalSec: uint32) = - b.intervalSec = some(intervalSec) + b.intervalSec = Opt.some(intervalSec) proc withRelayJitterSec*(b: var StoreSyncConfBuilder, relayJitterSec: uint32) = - b.relayJitterSec = some(relayJitterSec) + b.relayJitterSec = Opt.some(relayJitterSec) -proc build*(b: StoreSyncConfBuilder): Result[Option[StoreSyncConf], string] = +proc build*(b: StoreSyncConfBuilder): Result[Opt[StoreSyncConf], string] = if not b.enabled.get(DefaultStoreSyncEnabled): - return ok(none(StoreSyncConf)) + return ok(Opt.none(StoreSyncConf)) if b.rangeSec.isNone(): return err "store.rangeSec is not specified" @@ -43,7 +43,7 @@ proc build*(b: StoreSyncConfBuilder): Result[Option[StoreSyncConf], string] = return err "store.relayJitterSec is not specified" return ok( - some( + Opt.some( StoreSyncConf( rangeSec: b.rangeSec.get(), intervalSec: b.intervalSec.get(), diff --git a/logos_delivery/waku/factory/conf_builder/waku_conf_builder.nim b/logos_delivery/waku/factory/conf_builder/waku_conf_builder.nim index 0eaec4934..469506e55 100644 --- a/logos_delivery/waku/factory/conf_builder/waku_conf_builder.nim +++ b/logos_delivery/waku/factory/conf_builder/waku_conf_builder.nim @@ -1,8 +1,7 @@ -import logos_delivery/waku/compat/option_valueor import libp2p/crypto/crypto, libp2p/multiaddress, - std/[net, options, sequtils], + std/[net, sequtils], stint, chronicles, chronos, @@ -101,14 +100,14 @@ type MaxMessageSize* = object # TODO: Add default to most values so that when a developer uses # the builder, it works out-of-the-box type WakuConfBuilder* = object - nodeKey: Option[crypto.PrivateKey] + nodeKey: Opt[crypto.PrivateKey] - clusterId: Option[uint16] - shardingConf: Option[ShardingConfKind] - numShardsInCluster: Option[uint16] - subscribeShards: Option[seq[uint16]] - protectedShards: Option[seq[ProtectedShard]] - contentTopics: Option[seq[string]] + clusterId: Opt[uint16] + shardingConf: Opt[ShardingConfKind] + numShardsInCluster: Opt[uint16] + subscribeShards: Opt[seq[uint16]] + protectedShards: Opt[seq[ProtectedShard]] + contentTopics: Opt[seq[string]] # Conf builders dnsDiscoveryConf*: DnsDiscoveryConfBuilder @@ -124,54 +123,54 @@ type WakuConfBuilder* = object rateLimitConf*: RateLimitConfBuilder kademliaDiscoveryConf*: KademliaDiscoveryConfBuilder # End conf builders - relay: Option[bool] - lightPush: Option[bool] - peerExchange: Option[bool] - storeSync: Option[bool] - relayPeerExchange: Option[bool] - mix: Option[bool] + relay: Opt[bool] + lightPush: Opt[bool] + peerExchange: Opt[bool] + storeSync: Opt[bool] + relayPeerExchange: Opt[bool] + mix: Opt[bool] # TODO: move within a relayConf - rendezvous: Option[bool] + rendezvous: Opt[bool] - networkPresetConf: Option[NetworkPresetConf] + networkPresetConf: Opt[NetworkPresetConf] staticNodes: seq[string] - remoteStoreNode: Option[string] - remoteLightPushNode: Option[string] - remoteFilterNode: Option[string] - remotePeerExchangeNode: Option[string] + remoteStoreNode: Opt[string] + remoteLightPushNode: Opt[string] + remoteFilterNode: Opt[string] + remotePeerExchangeNode: Opt[string] maxMessageSize: MaxMessageSize - logLevel: Option[logging.LogLevel] - logFormat: Option[logging.LogFormat] + logLevel: Opt[logging.LogLevel] + logFormat: Opt[logging.LogFormat] - natStrategy: Option[string] + natStrategy: Opt[string] - p2pTcpPort: Option[Port] - p2pListenAddress: Option[IpAddress] - portsShift: Option[uint16] - dns4DomainName: Option[string] + p2pTcpPort: Opt[Port] + p2pListenAddress: Opt[IpAddress] + portsShift: Opt[uint16] + dns4DomainName: Opt[string] extMultiAddrs: seq[string] - extMultiAddrsOnly: Option[bool] + extMultiAddrsOnly: Opt[bool] dnsAddrsNameServers: seq[IpAddress] - peerPersistence: Option[bool] - peerStoreCapacity: Option[int] - maxConnections: Option[int] - colocationLimit: Option[int] + peerPersistence: Opt[bool] + peerStoreCapacity: Opt[int] + maxConnections: Opt[int] + colocationLimit: Opt[int] - agentString: Option[string] + agentString: Opt[string] - maxRelayPeers: Option[int] - relayShardedPeerManagement: Option[bool] - relayServiceRatio: Option[string] - circuitRelayClient: Option[bool] + maxRelayPeers: Opt[int] + relayShardedPeerManagement: Opt[bool] + relayServiceRatio: Opt[string] + circuitRelayClient: Opt[bool] - localStoragePath: Option[string] + localStoragePath: Opt[string] proc init*(T: type WakuConfBuilder): WakuConfBuilder = WakuConfBuilder( @@ -191,74 +190,74 @@ proc init*(T: type WakuConfBuilder): WakuConfBuilder = proc withNetworkPresetConf*( b: var WakuConfBuilder, networkPresetConf: NetworkPresetConf ) = - b.networkPresetConf = some(networkPresetConf) + b.networkPresetConf = Opt.some(networkPresetConf) proc withNodeKey*(b: var WakuConfBuilder, nodeKey: crypto.PrivateKey) = - b.nodeKey = some(nodeKey) + b.nodeKey = Opt.some(nodeKey) proc withClusterId*(b: var WakuConfBuilder, clusterId: uint16) = - b.clusterId = some(clusterId) + b.clusterId = Opt.some(clusterId) proc withShardingConf*(b: var WakuConfBuilder, shardingConf: ShardingConfKind) = - b.shardingConf = some(shardingConf) + b.shardingConf = Opt.some(shardingConf) proc withNumShardsInCluster*(b: var WakuConfBuilder, numShardsInCluster: uint16) = - b.numShardsInCluster = some(numShardsInCluster) + b.numShardsInCluster = Opt.some(numShardsInCluster) proc withSubscribeShards*(b: var WakuConfBuilder, shards: seq[uint16]) = - b.subscribeShards = some(shards) + b.subscribeShards = Opt.some(shards) proc withProtectedShards*( b: var WakuConfBuilder, protectedShards: seq[ProtectedShard] ) = - b.protectedShards = some(protectedShards) + b.protectedShards = Opt.some(protectedShards) proc withContentTopics*(b: var WakuConfBuilder, contentTopics: seq[string]) = - b.contentTopics = some(contentTopics) + b.contentTopics = Opt.some(contentTopics) proc withRelay*(b: var WakuConfBuilder, relay: bool) = - b.relay = some(relay) + b.relay = Opt.some(relay) proc withLightPush*(b: var WakuConfBuilder, lightPush: bool) = - b.lightPush = some(lightPush) + b.lightPush = Opt.some(lightPush) proc withStoreSync*(b: var WakuConfBuilder, storeSync: bool) = - b.storeSync = some(storeSync) + b.storeSync = Opt.some(storeSync) proc withPeerExchange*(b: var WakuConfBuilder, peerExchange: bool) = - b.peerExchange = some(peerExchange) + b.peerExchange = Opt.some(peerExchange) proc withRelayPeerExchange*(b: var WakuConfBuilder, relayPeerExchange: bool) = - b.relayPeerExchange = some(relayPeerExchange) + b.relayPeerExchange = Opt.some(relayPeerExchange) proc withRendezvous*(b: var WakuConfBuilder, rendezvous: bool) = - b.rendezvous = some(rendezvous) + b.rendezvous = Opt.some(rendezvous) proc withMix*(builder: var WakuConfBuilder, mix: bool) = - builder.mix = some(mix) + builder.mix = Opt.some(mix) proc withRemoteStoreNode*(b: var WakuConfBuilder, remoteStoreNode: string) = - b.remoteStoreNode = some(remoteStoreNode) + b.remoteStoreNode = Opt.some(remoteStoreNode) proc withRemoteLightPushNode*(b: var WakuConfBuilder, remoteLightPushNode: string) = - b.remoteLightPushNode = some(remoteLightPushNode) + b.remoteLightPushNode = Opt.some(remoteLightPushNode) proc withRemoteFilterNode*(b: var WakuConfBuilder, remoteFilterNode: string) = - b.remoteFilterNode = some(remoteFilterNode) + b.remoteFilterNode = Opt.some(remoteFilterNode) proc withRemotePeerExchangeNode*( b: var WakuConfBuilder, remotePeerExchangeNode: string ) = - b.remotePeerExchangeNode = some(remotePeerExchangeNode) + b.remotePeerExchangeNode = Opt.some(remotePeerExchangeNode) proc withPeerPersistence*(b: var WakuConfBuilder, peerPersistence: bool) = - b.peerPersistence = some(peerPersistence) + b.peerPersistence = Opt.some(peerPersistence) proc withPeerStoreCapacity*(b: var WakuConfBuilder, peerStoreCapacity: int) = - b.peerStoreCapacity = some(peerStoreCapacity) + b.peerStoreCapacity = Opt.some(peerStoreCapacity) proc withMaxConnections*(b: var WakuConfBuilder, maxConnections: int) = - b.maxConnections = some(maxConnections) + b.maxConnections = Opt.some(maxConnections) proc withDnsAddrsNameServers*( b: var WakuConfBuilder, dnsAddrsNameServers: seq[IpAddress] @@ -266,51 +265,51 @@ proc withDnsAddrsNameServers*( b.dnsAddrsNameServers.insert(dnsAddrsNameServers) proc withLogLevel*(b: var WakuConfBuilder, logLevel: logging.LogLevel) = - b.logLevel = some(logLevel) + b.logLevel = Opt.some(logLevel) proc withLogFormat*(b: var WakuConfBuilder, logFormat: logging.LogFormat) = - b.logFormat = some(logFormat) + b.logFormat = Opt.some(logFormat) proc withP2pTcpPort*(b: var WakuConfBuilder, p2pTcpPort: Port) = - b.p2pTcpPort = some(p2pTcpPort) + b.p2pTcpPort = Opt.some(p2pTcpPort) proc withP2pTcpPort*(b: var WakuConfBuilder, p2pTcpPort: uint16) = - b.p2pTcpPort = some(Port(p2pTcpPort)) + b.p2pTcpPort = Opt.some(Port(p2pTcpPort)) proc withPortsShift*(b: var WakuConfBuilder, portsShift: uint16) = - b.portsShift = some(portsShift) + b.portsShift = Opt.some(portsShift) proc withP2pListenAddress*(b: var WakuConfBuilder, p2pListenAddress: IpAddress) = - b.p2pListenAddress = some(p2pListenAddress) + b.p2pListenAddress = Opt.some(p2pListenAddress) proc withExtMultiAddrsOnly*(b: var WakuConfBuilder, extMultiAddrsOnly: bool) = - b.extMultiAddrsOnly = some(extMultiAddrsOnly) + b.extMultiAddrsOnly = Opt.some(extMultiAddrsOnly) proc withDns4DomainName*(b: var WakuConfBuilder, dns4DomainName: string) = - b.dns4DomainName = some(dns4DomainName) + b.dns4DomainName = Opt.some(dns4DomainName) proc withNatStrategy*(b: var WakuConfBuilder, natStrategy: string) = - b.natStrategy = some(natStrategy) + b.natStrategy = Opt.some(natStrategy) proc withAgentString*(b: var WakuConfBuilder, agentString: string) = - b.agentString = some(agentString) + b.agentString = Opt.some(agentString) proc withColocationLimit*(b: var WakuConfBuilder, colocationLimit: int) = - b.colocationLimit = some(colocationLimit) + b.colocationLimit = Opt.some(colocationLimit) proc withRelayServiceRatio*(b: var WakuConfBuilder, relayServiceRatio: string) = - b.relayServiceRatio = some(relayServiceRatio) + b.relayServiceRatio = Opt.some(relayServiceRatio) proc withCircuitRelayClient*(b: var WakuConfBuilder, circuitRelayClient: bool) = - b.circuitRelayClient = some(circuitRelayClient) + b.circuitRelayClient = Opt.some(circuitRelayClient) proc withRelayShardedPeerManagement*( b: var WakuConfBuilder, relayShardedPeerManagement: bool ) = - b.relayShardedPeerManagement = some(relayShardedPeerManagement) + b.relayShardedPeerManagement = Opt.some(relayShardedPeerManagement) proc withLocalStoragePath*(b: var WakuConfBuilder, localStoragePath: string) = - b.localStoragePath = some(localStoragePath) + b.localStoragePath = Opt.some(localStoragePath) proc withExtMultiAddrs*(builder: var WakuConfBuilder, extMultiAddrs: seq[string]) = builder.extMultiAddrs = concat(builder.extMultiAddrs, extMultiAddrs) @@ -339,9 +338,9 @@ proc nodeKey( return ok(nodeKey) proc buildShardingConf( - bShardingConfKind: Option[ShardingConfKind], - bNumShardsInCluster: Option[uint16], - bSubscribeShards: Option[seq[uint16]], + bShardingConfKind: Opt[ShardingConfKind], + bNumShardsInCluster: Opt[uint16], + bSubscribeShards: Opt[seq[uint16]], ): (ShardingConf, seq[uint16]) = case bShardingConfKind.get(DefaultShardingConfKind) of StaticSharding: @@ -354,7 +353,7 @@ proc buildShardingConf( (shardingConf, bSubscribeShards.get(toSeq(0.uint16 .. upperShard))) template checkSetPresetValueToField[T]( - field: var Option[T], presetVal: T, msg: static string + field: var Opt[T], presetVal: T, msg: static string ) = ## Set the field to the preset's value, unless the field is already set ## (explicit wins). Warn iff the field's existing value differs from the @@ -364,7 +363,7 @@ template checkSetPresetValueToField[T]( if field.get() != presetVal: warn msg, used = field.get(), discarded = presetVal else: - field = some(presetVal) + field = Opt.some(presetVal) proc checkAddPresetValueToField[T](field: var seq[T], presetVals: seq[T]) = ## Append the preset's list values to the field's existing list. Lists @@ -481,7 +480,7 @@ proc applyNetworkPresetConf(builder: var WakuConfBuilder) = warn "Failed to process entry nodes from network conf", error = processed.error() proc rejectOverride[T]( - field: Option[T], presetValue: T, msg: string + field: Opt[T], presetValue: T, msg: string ): Result[void, string] = ## Errors with `msg` if `field` is set to anything other than the preset's value. if field.isSome() and field.get() != presetValue: @@ -702,11 +701,11 @@ proc build*( if builder.dns4DomainName.isSome(): let d = builder.dns4DomainName.get() if d.string != "": - some(d) + Opt.some(d) else: - none(string) + Opt.none(string) else: - none(string) + Opt.none(string) var extMultiAddrs: seq[MultiAddress] = @[] for s in builder.extMultiAddrs: diff --git a/logos_delivery/waku/factory/conf_builder/web_socket_conf_builder.nim b/logos_delivery/waku/factory/conf_builder/web_socket_conf_builder.nim index d71ffbc1f..84586258b 100644 --- a/logos_delivery/waku/factory/conf_builder/web_socket_conf_builder.nim +++ b/logos_delivery/waku/factory/conf_builder/web_socket_conf_builder.nim @@ -1,4 +1,4 @@ -import chronicles, std/[net, options], results +import chronicles, std/net, results import logos_delivery/waku/factory/waku_conf logScope: @@ -13,45 +13,45 @@ const ## WebSocket Config Builder ## ############################## type WebSocketConfBuilder* = object - enabled*: Option[bool] - webSocketPort*: Option[Port] - secureEnabled*: Option[bool] - keyPath*: Option[string] - certPath*: Option[string] + enabled*: Opt[bool] + webSocketPort*: Opt[Port] + secureEnabled*: Opt[bool] + keyPath*: Opt[string] + certPath*: Opt[string] proc init*(T: type WebSocketConfBuilder): WebSocketConfBuilder = WebSocketConfBuilder() proc withEnabled*(b: var WebSocketConfBuilder, enabled: bool) = - b.enabled = some(enabled) + b.enabled = Opt.some(enabled) proc withSecureEnabled*(b: var WebSocketConfBuilder, secureEnabled: bool) = - b.secureEnabled = some(secureEnabled) + b.secureEnabled = Opt.some(secureEnabled) if b.secureEnabled.get(): - b.enabled = some(true) # ws must be enabled to use wss + b.enabled = Opt.some(true) # ws must be enabled to use wss proc withWebSocketPort*(b: var WebSocketConfBuilder, webSocketPort: Port) = - b.webSocketPort = some(webSocketPort) + b.webSocketPort = Opt.some(webSocketPort) proc withWebSocketPort*(b: var WebSocketConfBuilder, webSocketPort: uint16) = - b.webSocketPort = some(Port(webSocketPort)) + b.webSocketPort = Opt.some(Port(webSocketPort)) proc withKeyPath*(b: var WebSocketConfBuilder, keyPath: string) = - b.keyPath = some(keyPath) + b.keyPath = Opt.some(keyPath) proc withCertPath*(b: var WebSocketConfBuilder, certPath: string) = - b.certPath = some(certPath) + b.certPath = Opt.some(certPath) -proc build*(b: WebSocketConfBuilder): Result[Option[WebSocketConf], string] = +proc build*(b: WebSocketConfBuilder): Result[Opt[WebSocketConf], string] = if not b.enabled.get(DefaultWebSocketEnabled): - return ok(none(WebSocketConf)) + return ok(Opt.none(WebSocketConf)) if not b.secureEnabled.get(DefaultWebSocketSecureEnabled): return ok( - some( + Opt.some( WebSocketConf( port: b.webSocketPort.get(DefaultWebSocketPort), - secureConf: none(WebSocketSecureConf), + secureConf: Opt.none(WebSocketSecureConf), ) ) ) @@ -62,10 +62,10 @@ proc build*(b: WebSocketConfBuilder): Result[Option[WebSocketConf], string] = return err("WebSocketSecure enabled but cert path is not specified") return ok( - some( + Opt.some( WebSocketConf( port: b.webSocketPort.get(DefaultWebSocketPort), - secureConf: some( + secureConf: Opt.some( WebSocketSecureConf(keyPath: b.keyPath.get(), certPath: b.certPath.get()) ), ) diff --git a/logos_delivery/waku/factory/internal_config.nim b/logos_delivery/waku/factory/internal_config.nim index 45d7f0b4c..0ea11f7c6 100644 --- a/logos_delivery/waku/factory/internal_config.nim +++ b/logos_delivery/waku/factory/internal_config.nim @@ -1,4 +1,3 @@ -import logos_delivery/waku/compat/option_valueor import chronicles, chronos, @@ -6,7 +5,7 @@ import libp2p/crypto/curve25519, libp2p/multiaddress, libp2p/nameresolving/dnsresolver, - std/[options, sequtils, net], + std/[sequtils, net], results import @@ -85,9 +84,9 @@ proc dnsResolve*( proc networkConfiguration*( clusterId: uint16, conf: EndpointConf, - discv5Conf: Option[Discv5Conf], - webSocketConf: Option[WebSocketConf], - quicConf: Option[QuicConf], + discv5Conf: Opt[Discv5Conf], + webSocketConf: Opt[WebSocketConf], + quicConf: Opt[QuicConf], wakuFlags: CapabilitiesBitfield, dnsAddrsNameServers: seq[IpAddress], clientId: string, @@ -97,9 +96,9 @@ proc networkConfiguration*( let (quicEnabled, quicBindPort) = if quicConf.isSome(): let qConf = quicConf.get() - (true, some(qConf.port)) + (true, Opt.some(qConf.port)) else: - (false, none(Port)) + (false, Opt.none(Port)) # NAT-map the QUIC UDP port (placeholder when QUIC off) var (extIp, extTcpPort, extUdpPort) = setupNat( @@ -110,9 +109,9 @@ proc networkConfiguration*( let discv5UdpPort = if discv5Conf.isSome(): - some(discv5Conf.get().udpPort) + Opt.some(discv5Conf.get().udpPort) else: - none(Port) + Opt.none(Port) ## TODO: the NAT setup assumes a manual port mapping configuration if extIp ## config is set. This probably implies adding manual config item for @@ -120,7 +119,7 @@ proc networkConfiguration*( ## manual config, the external port is the same as the bind port. extPort = if (extIp.isSome() or conf.dns4DomainName.isSome()) and extTcpPort.isNone(): - some(tcpBindPort) + Opt.some(tcpBindPort) else: extTcpPort @@ -136,7 +135,7 @@ proc networkConfiguration*( let dns = (await dnsResolve(conf.dns4DomainName.get(), dnsAddrsNameServers)).valueOr: return err($error) # Pass error down the stack - extIp = some(parseIpAddress(dns)) + extIp = Opt.some(parseIpAddress(dns)) except CatchableError: return err("Could not update extIp to resolved DNS IP: " & getCurrentExceptionMsg()) @@ -144,9 +143,9 @@ proc networkConfiguration*( let (wsEnabled, wsBindPort, wssEnabled) = if webSocketConf.isSome: let wsConf = webSocketConf.get() - (true, some(wsConf.port), wsConf.secureConf.isSome) + (true, Opt.some(wsConf.port), wsConf.secureConf.isSome) else: - (false, none(Port), false) + (false, Opt.none(Port), false) # Wrap in none because NetConfig does not have a default constructor # TODO: We could change bindIp in NetConfig to be something less restrictive @@ -167,7 +166,7 @@ proc networkConfiguration*( extQuicPort = extQuicPort, dns4DomainName = conf.dns4DomainName, discv5UdpPort = discv5UdpPort, - wakuFlags = some(wakuFlags), + wakuFlags = Opt.some(wakuFlags), dnsNameServers = dnsAddrsNameServers, ) diff --git a/logos_delivery/waku/factory/node_factory.nim b/logos_delivery/waku/factory/node_factory.nim index daa2e5fd0..5cd06b457 100644 --- a/logos_delivery/waku/factory/node_factory.nim +++ b/logos_delivery/waku/factory/node_factory.nim @@ -1,6 +1,6 @@ -import logos_delivery/waku/compat/option_valueor import - std/[options, sequtils], + results, + std/sequtils, chronicles, chronos, libp2p/peerid, @@ -44,7 +44,7 @@ import ## Peer persistence const PeerPersistenceDbUrl = "peers.db" -proc setupPeerStorage(): Result[Option[WakuPeerStorage], string] = +proc setupPeerStorage(): Result[Opt[WakuPeerStorage], string] = let db = ?SqliteDatabase.new(PeerPersistenceDbUrl) ?peer_store_sqlite_migrations.migrate(db) @@ -52,7 +52,7 @@ proc setupPeerStorage(): Result[Option[WakuPeerStorage], string] = let res = WakuPeerStorage.new(db).valueOr: return err("failed to init peer store" & error) - return ok(some(res)) + return ok(Opt.some(res)) ## Init waku node instance @@ -61,7 +61,7 @@ proc initNode( netConfig: NetConfig, rng: crypto.Rng, record: enr.Record, - peerStore: Option[WakuPeerStorage], + peerStore: Opt[WakuPeerStorage], relay: Relay, dynamicBootstrapNodes: openArray[RemotePeerInfo] = @[], ): Result[WakuNode, string] = @@ -78,9 +78,9 @@ proc initNode( let (secureKey, secureCert) = if conf.webSocketConf.isSome() and conf.webSocketConf.get().secureConf.isSome(): let wssConf = conf.webSocketConf.get().secureConf.get() - (some(wssConf.keyPath), some(wssConf.certPath)) + (Opt.some(wssConf.keyPath), Opt.some(wssConf.certPath)) else: - (none(string), none(string)) + (Opt.none(string), Opt.none(string)) let nameResolver = DnsResolver.new(conf.dnsAddrsNameServers.mapIt(initTAddress(it, Port(53)))) @@ -93,13 +93,13 @@ proc initNode( builder.withNetworkConfiguration(netConfig) builder.withPeerStorage(pStorage, capacity = conf.peerStoreCapacity) builder.withSwitchConfiguration( - maxConnections = some(conf.maxConnections.int), + maxConnections = Opt.some(conf.maxConnections.int), secureKey = secureKey, secureCert = secureCert, nameResolver = nameResolver, sendSignedPeerRecord = conf.relayPeerExchange, # We send our own signed peer record when peer exchange enabled - agentString = some(conf.agentString), + agentString = Opt.some(conf.agentString), ) builder.withColocationLimit(conf.colocationLimit) @@ -252,7 +252,7 @@ proc setupProtocols( warn("Auto sharding is disabled") # Mount relay on all nodes - var peerExchangeHandler = none(RoutingRecordsHandler) + var peerExchangeHandler = Opt.none(RoutingRecordsHandler) if conf.relayPeerExchange: proc handlePeerExchange( peer: PeerId, topic: string, peers: seq[RoutingRecordsPair] @@ -270,7 +270,7 @@ proc setupProtocols( # Peers added are filtered by the peer manager node.peerManager.addPeer(peer, PeerOrigin.PeerExchange) - peerExchangeHandler = some(handlePeerExchange) + peerExchangeHandler = Opt.some(handlePeerExchange) # TODO: when using autosharding, the user should not be expected to pass any shards, but only content topics # Hence, this joint logic should be removed in favour of an either logic: @@ -388,7 +388,7 @@ proc setupProtocols( if conf.peerExchangeService: try: await mountPeerExchange( - node, some(conf.clusterId), node.rateLimitSettings.getSetting(PEEREXCHG) + node, Opt.some(conf.clusterId), node.rateLimitSettings.getSetting(PEEREXCHG) ) except CatchableError: return @@ -479,7 +479,7 @@ proc setupNode*( info "Setting up storage" ## Peer persistence - var peerStore: Option[WakuPeerStorage] + var peerStore: Opt[WakuPeerStorage] if wakuConf.peerPersistence: peerStore = setupPeerStorage().valueOr: error "Setting up storage failed", error = "failed to setup peer store " & error diff --git a/logos_delivery/waku/factory/waku_conf.nim b/logos_delivery/waku/factory/waku_conf.nim index db1a8aa28..614b1318f 100644 --- a/logos_delivery/waku/factory/waku_conf.nim +++ b/logos_delivery/waku/factory/waku_conf.nim @@ -1,5 +1,5 @@ import - std/[net, options, strutils], + std/[net, strutils], chronicles, chronos, libp2p/crypto/crypto, @@ -36,7 +36,7 @@ type WebSocketSecureConf* {.requiresInit.} = object type WebSocketConf* = object port*: Port - secureConf*: Option[WebSocketSecureConf] + secureConf*: Opt[WebSocketSecureConf] type QuicConf* = object port*: Port @@ -61,14 +61,14 @@ type MixConf* = ref object mixPubKey*: Curve25519Key mixnodes*: seq[MixNodePubInfo] -type StoreServiceConf* {.requiresInit.} = object +type StoreServiceConf* = object dbMigration*: bool dbURl*: string dbVacuum*: bool maxNumDbConnections*: int retentionPolicies*: seq[string] resume*: bool - storeSyncConf*: Option[StoreSyncConf] + storeSyncConf*: Opt[StoreSyncConf] type FilterServiceConf* {.requiresInit.} = object maxPeersToServe*: uint32 @@ -78,7 +78,7 @@ type FilterServiceConf* {.requiresInit.} = object type EndpointConf* = object # TODO: make enum natStrategy*: string p2pTcpPort*: Port - dns4DomainName*: Option[string] + dns4DomainName*: Opt[string] p2pListenAddress*: IpAddress extMultiAddrs*: seq[MultiAddress] extMultiAddrsOnly*: bool @@ -87,7 +87,7 @@ type EndpointConf* = object # TODO: make enum ## All information needed by a waku node should be contained ## In this object. A convenient `validate` method enables doing ## sanity checks beyond type enforcement. -## If `Option` is `some` it means the related protocol is enabled. +## If `Opt` is `some` it means the related protocol is enabled. type WakuConf* {.requiresInit.} = ref object # ref because `getRunningNetConfig` modifies it nodeKey*: crypto.PrivateKey @@ -109,17 +109,17 @@ type WakuConf* {.requiresInit.} = ref object rendezvous*: bool circuitRelayClient*: bool - discv5Conf*: Option[Discv5Conf] - dnsDiscoveryConf*: Option[DnsDiscoveryConf] - filterServiceConf*: Option[FilterServiceConf] - storeServiceConf*: Option[StoreServiceConf] - rlnRelayConf*: Option[RlnConf] - restServerConf*: Option[RestServerConf] - metricsServerConf*: Option[MetricsServerConf] - webSocketConf*: Option[WebSocketConf] - quicConf*: Option[QuicConf] - mixConf*: Option[MixConf] - kademliaDiscoveryConf*: Option[KademliaDiscoveryConf] + discv5Conf*: Opt[Discv5Conf] + dnsDiscoveryConf*: Opt[DnsDiscoveryConf] + filterServiceConf*: Opt[FilterServiceConf] + storeServiceConf*: Opt[StoreServiceConf] + rlnRelayConf*: Opt[RlnConf] + restServerConf*: Opt[RestServerConf] + metricsServerConf*: Opt[MetricsServerConf] + webSocketConf*: Opt[WebSocketConf] + quicConf*: Opt[QuicConf] + mixConf*: Opt[MixConf] + kademliaDiscoveryConf*: Opt[KademliaDiscoveryConf] dnsAddrsNameServers*: seq[IpAddress] endpointConf*: EndpointConf @@ -127,10 +127,10 @@ type WakuConf* {.requiresInit.} = ref object # TODO: could probably make it a `PeerRemoteInfo` staticNodes*: seq[string] - remoteStoreNode*: Option[string] - remoteLightPushNode*: Option[string] - remoteFilterNode*: Option[string] - remotePeerExchangeNode*: Option[string] + remoteStoreNode*: Opt[string] + remoteLightPushNode*: Opt[string] + remoteFilterNode*: Opt[string] + remotePeerExchangeNode*: Opt[string] maxMessageSizeBytes*: uint64 @@ -139,7 +139,7 @@ type WakuConf* {.requiresInit.} = ref object peerPersistence*: bool # TODO: should clearly be a uint - peerStoreCapacity*: Option[int] + peerStoreCapacity*: Opt[int] # TODO: should clearly be a uint maxConnections*: int @@ -150,7 +150,7 @@ type WakuConf* {.requiresInit.} = ref object rateLimit*: ProtocolRateLimitSettings # TODO: those could be in a relay conf object - maxRelayPeers*: Option[int] + maxRelayPeers*: Opt[int] relayShardedPeerManagement*: bool # TODO: use proper type relayServiceRatio*: string diff --git a/logos_delivery/waku/incentivization/common.nim b/logos_delivery/waku/incentivization/common.nim index 1fdfb05a9..45686f3fa 100644 --- a/logos_delivery/waku/incentivization/common.nim +++ b/logos_delivery/waku/incentivization/common.nim @@ -1,9 +1,9 @@ -import std/options +import results import logos_delivery/waku/incentivization/rpc proc init*(T: type EligibilityStatus, isEligible: bool): T = if isEligible: - EligibilityStatus(statusCode: uint32(200), statusDesc: some("OK")) + EligibilityStatus(statusCode: uint32(200), statusDesc: Opt.some("OK")) else: - EligibilityStatus(statusCode: uint32(402), statusDesc: some("Payment Required")) + EligibilityStatus(statusCode: uint32(402), statusDesc: Opt.some("Payment Required")) diff --git a/logos_delivery/waku/incentivization/eligibility_manager.nim b/logos_delivery/waku/incentivization/eligibility_manager.nim index ed882f524..298d52ccf 100644 --- a/logos_delivery/waku/incentivization/eligibility_manager.nim +++ b/logos_delivery/waku/incentivization/eligibility_manager.nim @@ -1,5 +1,6 @@ -import logos_delivery/waku/compat/option_valueor -import std/[options, sets], chronos, web3, stew/byteutils, stint, results, chronicles +import std/sets, chronos, web3, stew/byteutils, stint, results + +import chronicles import logos_delivery/waku/incentivization/rpc, tests/waku_rln_relay/utils_onchain diff --git a/logos_delivery/waku/incentivization/reputation_manager.nim b/logos_delivery/waku/incentivization/reputation_manager.nim index 3177c0fdf..cd8e6963b 100644 --- a/logos_delivery/waku/incentivization/reputation_manager.nim +++ b/logos_delivery/waku/incentivization/reputation_manager.nim @@ -1,4 +1,4 @@ -import tables, std/options +import results, tables import ../waku_lightpush_legacy/rpc type @@ -8,26 +8,24 @@ type BadResponse GoodResponse - # Encode reputation indicator as Option[bool]: - # some(true) => GoodRep - # some(false) => BadRep - # none(bool) => unknown / not set + # Encode reputation indicator as Opt[bool]: + # Opt.some(true) => GoodRep + # Opt.some(false) => BadRep + # Opt.none(bool) => unknown / not set ReputationManager* = ref object - reputationOf*: Table[PeerId, Option[bool]] + reputationOf*: Table[PeerId, Opt[bool]] proc init*(T: type ReputationManager): ReputationManager = - return ReputationManager(reputationOf: initTable[PeerId, Option[bool]]()) + return ReputationManager(reputationOf: initTable[PeerId, Opt[bool]]()) -proc setReputation*( - manager: var ReputationManager, peer: PeerId, repValue: Option[bool] -) = +proc setReputation*(manager: var ReputationManager, peer: PeerId, repValue: Opt[bool]) = manager.reputationOf[peer] = repValue -proc getReputation*(manager: ReputationManager, peer: PeerId): Option[bool] = +proc getReputation*(manager: ReputationManager, peer: PeerId): Opt[bool] = if peer in manager.reputationOf: result = manager.reputationOf[peer] else: - result = none(bool) + result = Opt.none(bool) # Evaluate the quality of a PushResponse by checking its isSuccess field proc evaluateResponse*(response: PushResponse): ResponseQuality = @@ -43,6 +41,6 @@ proc updateReputationFromResponse*( let respQuality = evaluateResponse(response) case respQuality of BadResponse: - manager.setReputation(peer, some(false)) # false => BadRep + manager.setReputation(peer, Opt.some(false)) # false => BadRep of GoodResponse: - manager.setReputation(peer, some(true)) # true => GoodRep + manager.setReputation(peer, Opt.some(true)) # true => GoodRep diff --git a/logos_delivery/waku/incentivization/rpc.nim b/logos_delivery/waku/incentivization/rpc.nim index 5223f5b5b..6e54ec201 100644 --- a/logos_delivery/waku/incentivization/rpc.nim +++ b/logos_delivery/waku/incentivization/rpc.nim @@ -1,12 +1,12 @@ -import std/options +import results # Implementing the RFC: # https://github.com/vacp2p/rfc/tree/master/content/docs/rfcs/73 type EligibilityProof* = object - proofOfPayment*: Option[seq[byte]] + proofOfPayment*: Opt[seq[byte]] EligibilityStatus* = object statusCode*: uint32 - statusDesc*: Option[string] + statusDesc*: Opt[string] diff --git a/logos_delivery/waku/incentivization/rpc_codec.nim b/logos_delivery/waku/incentivization/rpc_codec.nim index 9529ddffe..1696bb8c3 100644 --- a/logos_delivery/waku/incentivization/rpc_codec.nim +++ b/logos_delivery/waku/incentivization/rpc_codec.nim @@ -1,5 +1,4 @@ -import std/options -import ../common/protobuf, ./rpc +import results, ../common/protobuf, ./rpc # Codec for EligibilityProof @@ -18,9 +17,9 @@ proc decode*(T: type EligibilityProof, buffer: seq[byte]): ProtobufResult[T] = var epRpc = EligibilityProof() var proofOfPayment = newSeq[byte]() if not ?pb.getField(1, proofOfPayment): - epRpc.proofOfPayment = none(seq[byte]) + epRpc.proofOfPayment = Opt.none(seq[byte]) else: - epRpc.proofOfPayment = some(proofOfPayment) + epRpc.proofOfPayment = Opt.some(proofOfPayment) ok(epRpc) # Codec for EligibilityStatus @@ -45,7 +44,7 @@ proc decode*(T: type EligibilityStatus, buffer: seq[byte]): ProtobufResult[T] = # status description var description = "" if not ?pb.getField(2, description): - esRpc.statusDesc = none(string) + esRpc.statusDesc = Opt.none(string) else: - esRpc.statusDesc = some(description) + esRpc.statusDesc = Opt.some(description) ok(esRpc) diff --git a/logos_delivery/waku/net/net_config.nim b/logos_delivery/waku/net/net_config.nim index 7d1fca9ff..5f1174e98 100644 --- a/logos_delivery/waku/net/net_config.nim +++ b/logos_delivery/waku/net/net_config.nim @@ -1,31 +1,28 @@ {.push raises: [].} -import - std/[options, sequtils, strutils, net], - results, - libp2p/[multiaddress, multicodec, wire] +import std/[sequtils, strutils, net], results, libp2p/[multiaddress, multicodec, wire] import ../../waku/waku_core/peers import ../waku_enr type NetConfig* = object hostAddress*: MultiAddress clusterId*: uint16 - wsHostAddress*: Option[MultiAddress] - quicHostAddress*: Option[MultiAddress] - hostExtAddress*: Option[MultiAddress] - wsExtAddress*: Option[MultiAddress] + wsHostAddress*: Opt[MultiAddress] + quicHostAddress*: Opt[MultiAddress] + hostExtAddress*: Opt[MultiAddress] + wsExtAddress*: Opt[MultiAddress] wssEnabled*: bool - extIp*: Option[IpAddress] - extPort*: Option[Port] - dns4DomainName*: Option[string] + extIp*: Opt[IpAddress] + extPort*: Opt[Port] + dns4DomainName*: Opt[string] dnsNameServers*: seq[IpAddress] announcedAddresses*: seq[MultiAddress] extMultiAddrs*: seq[MultiAddress] enrMultiAddrs*: seq[MultiAddress] - enrIp*: Option[IpAddress] - enrPort*: Option[Port] - discv5UdpPort*: Option[Port] - wakuFlags*: Option[CapabilitiesBitfield] + enrIp*: Opt[IpAddress] + enrPort*: Opt[Port] + discv5UdpPort*: Opt[Port] + wakuFlags*: Opt[CapabilitiesBitfield] bindIp*: IpAddress bindPort*: Port @@ -81,24 +78,24 @@ proc isP2pTcpAddress*(ma: MultiAddress): bool = proc getPorts*( listenAddrs: seq[MultiAddress] -): Result[tuple[tcpPort, websocketPort, quicPort: Option[Port]], string] = - var tcpPort, websocketPort, quicPort = none(Port) +): Result[tuple[tcpPort, websocketPort, quicPort: Opt[Port]], string] = + var tcpPort, websocketPort, quicPort = Opt.none(Port) for a in listenAddrs: if a.isWsAddress(): if websocketPort.isNone(): let wsAddress = initTAddress(a).valueOr: return err("getPorts wsAddr error:" & $error) - websocketPort = some(wsAddress.port) + websocketPort = Opt.some(wsAddress.port) elif a.isQuicAddress(): if quicPort.isNone(): let quicAddress = initTAddress(a).valueOr: return err("getPorts quicAddr error:" & $error) - quicPort = some(quicAddress.port) + quicPort = Opt.some(quicAddress.port) elif tcpPort.isNone(): let tcpAddress = initTAddress(a).valueOr: return err("getPorts tcpAddr error:" & $error) - tcpPort = some(tcpAddress.port) + tcpPort = Opt.some(tcpAddress.port) return ok((tcpPort: tcpPort, websocketPort: websocketPort, quicPort: quicPort)) @@ -114,20 +111,20 @@ proc init*( T: type NetConfig, bindIp: IpAddress, bindPort: Port, - extIp = none(IpAddress), - extPort = none(Port), + extIp = Opt.none(IpAddress), + extPort = Opt.none(Port), extMultiAddrs = newSeq[MultiAddress](), extMultiAddrsOnly: bool = false, - wsBindPort: Option[Port] = some(DefaultWsBindPort), + wsBindPort: Opt[Port] = Opt.some(DefaultWsBindPort), wsEnabled: bool = false, wssEnabled: bool = false, - quicBindPort = none(Port), + quicBindPort = Opt.none(Port), quicEnabled: bool = false, - extQuicPort = none(Port), - dns4DomainName = none(string), - discv5UdpPort = none(Port), + extQuicPort = Opt.none(Port), + dns4DomainName = Opt.none(string), + discv5UdpPort = Opt.none(Port), clusterId: uint16 = 0, - wakuFlags = none(CapabilitiesBitfield), + wakuFlags = Opt.none(CapabilitiesBitfield), dnsNameServers = @[parseIpAddress("1.1.1.1"), parseIpAddress("1.0.0.1")], ): NetConfigResult = ## Initialize and validate waku node network configuration @@ -135,19 +132,19 @@ proc init*( # Bind addresses let hostAddress = ip4TcpEndPoint(bindIp, bindPort) - var wsHostAddress = none(MultiAddress) + var wsHostAddress = Opt.none(MultiAddress) if wsEnabled or wssEnabled: try: - wsHostAddress = some( + wsHostAddress = Opt.some( ip4TcpEndPoint(bindIp, wsbindPort.get(DefaultWsBindPort)) & wsFlag(wssEnabled) ) except CatchableError: return err(getCurrentExceptionMsg()) - var quicHostAddress = none(MultiAddress) + var quicHostAddress = Opt.none(MultiAddress) if quicEnabled: try: - quicHostAddress = some(ipQuicEndPoint(bindIp, quicBindPort.get(bindPort))) + quicHostAddress = Opt.some(ipQuicEndPoint(bindIp, quicBindPort.get(bindPort))) except CatchableError: return err("failed to initialize quic address: " & getCurrentExceptionMsg()) @@ -155,26 +152,26 @@ proc init*( if extIp.isSome(): extIp else: - some(bindIp) + Opt.some(bindIp) let enrPort = if extPort.isSome(): extPort else: - some(bindPort) + Opt.some(bindPort) # Setup external addresses, if available - var hostExtAddress, wsExtAddress, quicExtAddress = none(MultiAddress) + var hostExtAddress, wsExtAddress, quicExtAddress = Opt.none(MultiAddress) if dns4DomainName.isSome(): # Use dns4 for externally announced addresses try: - hostExtAddress = some(dns4TcpEndPoint(dns4DomainName.get(), extPort.get())) + hostExtAddress = Opt.some(dns4TcpEndPoint(dns4DomainName.get(), extPort.get())) except CatchableError: return err(getCurrentExceptionMsg()) if wsHostAddress.isSome(): try: - wsExtAddress = some( + wsExtAddress = Opt.some( dns4TcpEndPoint(dns4DomainName.get(), wsBindPort.get(DefaultWsBindPort)) & wsFlag(wssEnabled) ) @@ -183,7 +180,7 @@ proc init*( if quicHostAddress.isSome(): try: - quicExtAddress = some( + quicExtAddress = Opt.some( dns4QuicEndPoint( dns4DomainName.get(), extQuicPort.get(quicBindPort.get(bindPort)) ) @@ -193,11 +190,11 @@ proc init*( else: # No public domain name, use ext IP if available if extIp.isSome() and extPort.isSome(): - hostExtAddress = some(ip4TcpEndPoint(extIp.get(), extPort.get())) + hostExtAddress = Opt.some(ip4TcpEndPoint(extIp.get(), extPort.get())) if wsHostAddress.isSome(): try: - wsExtAddress = some( + wsExtAddress = Opt.some( ip4TcpEndPoint(extIp.get(), wsBindPort.get(DefaultWsBindPort)) & wsFlag(wssEnabled) ) @@ -206,7 +203,7 @@ proc init*( if quicHostAddress.isSome(): try: - quicExtAddress = some( + quicExtAddress = Opt.some( ipQuicEndPoint(extIp.get(), extQuicPort.get(quicBindPort.get(bindPort))) ) except CatchableError: diff --git a/logos_delivery/waku/node/health_monitor/node_health_monitor.nim b/logos_delivery/waku/node/health_monitor/node_health_monitor.nim index 8a4aadb4b..cfd47dd6a 100644 --- a/logos_delivery/waku/node/health_monitor/node_health_monitor.nim +++ b/logos_delivery/waku/node/health_monitor/node_health_monitor.nim @@ -1,15 +1,16 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} import - std/[options, sets, random, sequtils, json, strutils, tables], + results, + std/[sets, random, sequtils, json, strutils, tables], chronos, chronicles, libp2p/protocols/rendezvous, libp2p/protocols/pubsub, libp2p/protocols/pubsub/rpc/messages, logos_delivery/api/types, - logos_delivery/api/events/kernel_events, # EventConnectionStatusChange + logos_delivery/api/events/kernel_events, + # EventConnectionStatusChange logos_delivery/waku/[ waku_relay, api/events/health_events, @@ -360,7 +361,7 @@ proc getAllProtocolHealthInfo( proc calculateConnectionState*( protocols: seq[ProtocolHealth], strength: Table[WakuProtocol, int], ## latest connectivity strength (e.g. peer count) for a protocol - dLowOpt: Option[int], ## minimum relay peers for Connected status if in Core (Relay) mode + dLowOpt: Opt[int], ## minimum relay peers for Connected status if in Core (Relay) mode ): ConnectionStatus = var relayCount = 0 @@ -429,9 +430,9 @@ proc calculateConnectionState*( proc calculateConnectionState*(hm: NodeHealthMonitor): ConnectionStatus = let dLow = if isNil(hm.node.wakuRelay): - none(int) + Opt.none(int) else: - some(hm.node.wakuRelay.parameters.dLow) + Opt.some(hm.node.wakuRelay.parameters.dLow) return calculateConnectionState(hm.cachedProtocols, hm.strength, dLow) proc getNodeHealthReport*(hm: NodeHealthMonitor): Future[HealthReport] {.async.} = diff --git a/logos_delivery/waku/node/health_monitor/protocol_health.nim b/logos_delivery/waku/node/health_monitor/protocol_health.nim index 50d9c5572..080ffe1f9 100644 --- a/logos_delivery/waku/node/health_monitor/protocol_health.nim +++ b/logos_delivery/waku/node/health_monitor/protocol_health.nim @@ -1,4 +1,4 @@ -import std/[options, strformat] +import results, std/strformat import ./health_status import logos_delivery/waku/common/waku_protocol @@ -7,42 +7,43 @@ export waku_protocol type ProtocolHealth* = object protocol*: string health*: HealthStatus - desc*: Option[string] ## describes why a certain protocol is considered `NOT_READY` + desc*: Opt[string] ## describes why a certain protocol is considered `NOT_READY` proc notReady*(p: var ProtocolHealth, desc: string): ProtocolHealth = p.health = HealthStatus.NOT_READY - p.desc = some(desc) + p.desc = Opt.some(desc) return p proc ready*(p: var ProtocolHealth): ProtocolHealth = p.health = HealthStatus.READY - p.desc = none[string]() + p.desc = Opt.none(string) return p proc notMounted*(p: var ProtocolHealth): ProtocolHealth = p.health = HealthStatus.NOT_MOUNTED - p.desc = none[string]() + p.desc = Opt.none(string) return p proc synchronizing*(p: var ProtocolHealth): ProtocolHealth = p.health = HealthStatus.SYNCHRONIZING - p.desc = none[string]() + p.desc = Opt.none(string) return p proc initializing*(p: var ProtocolHealth): ProtocolHealth = p.health = HealthStatus.INITIALIZING - p.desc = none[string]() + p.desc = Opt.none(string) return p proc shuttingDown*(p: var ProtocolHealth): ProtocolHealth = p.health = HealthStatus.SHUTTING_DOWN - p.desc = none[string]() + p.desc = Opt.none(string) return p proc `$`*(p: ProtocolHealth): string = - return fmt"protocol: {p.protocol}, health: {p.health}, description: {p.desc}" + let desc = p.desc.get("") + return fmt"protocol: {p.protocol}, health: {p.health}, description: {desc}" proc init*(p: typedesc[ProtocolHealth], protocol: WakuProtocol): ProtocolHealth = return ProtocolHealth( - protocol: $protocol, health: HealthStatus.NOT_MOUNTED, desc: none[string]() + protocol: $protocol, health: HealthStatus.NOT_MOUNTED, desc: Opt.none(string) ) diff --git a/logos_delivery/waku/node/peer_manager/peer_manager.nim b/logos_delivery/waku/node/peer_manager/peer_manager.nim index 5ffc185b0..d0cb5ec14 100644 --- a/logos_delivery/waku/node/peer_manager/peer_manager.nim +++ b/logos_delivery/waku/node/peer_manager/peer_manager.nim @@ -1,10 +1,8 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} import - std/[ - options, sets, sequtils, times, strformat, strutils, math, random, tables, algorithm - ], + results, + std/[sets, sequtils, times, strformat, strutils, math, random, tables, algorithm], chronos, chronicles, metrics, @@ -241,7 +239,7 @@ proc loadFromStorage(pm: PeerManager) {.gcsafe.} = trace "recovered peers from storage", amount = amount proc selectPeers*( - pm: PeerManager, proto: string, shard: Option[PubsubTopic] = none(PubsubTopic) + pm: PeerManager, proto: string, shard: Opt[PubsubTopic] = Opt.none(PubsubTopic) ): seq[RemotePeerInfo] = ## Returns all peers that support the given protocol (and optionally shard), ## shuffled randomly. Callers can further filter or pick from this list. @@ -263,8 +261,8 @@ proc selectPeers*( return peers proc selectPeer*( - pm: PeerManager, proto: string, shard: Option[PubsubTopic] = none(PubsubTopic) -): Option[RemotePeerInfo] = + pm: PeerManager, proto: string, shard: Opt[PubsubTopic] = Opt.none(PubsubTopic) +): Opt[RemotePeerInfo] = ## Selects a single peer for a given protocol, checking service slots first ## (for non-relay protocols). let peers = pm.selectPeers(proto, shard) @@ -275,23 +273,23 @@ proc selectPeer*( if peers.len > 0: trace "Got peer from peerstore", peerId = peers[0].peerId, multi = peers[0].addrs[0], protocol = proto - return some(peers[0]) + return Opt.some(peers[0]) trace "No peer found for protocol", protocol = proto - return none(RemotePeerInfo) + return Opt.none(RemotePeerInfo) # For other protocols, we select the peer that is slotted for the given protocol pm.serviceSlots.withValue(proto, serviceSlot): trace "Got peer from service slots", peerId = serviceSlot[].peerId, multi = serviceSlot[].addrs[0], protocol = proto - return some(serviceSlot[]) + return Opt.some(serviceSlot[]) # If not slotted, we select a random peer for the given protocol if peers.len > 0: trace "Got peer from peerstore", peerId = peers[0].peerId, multi = peers[0].addrs[0], protocol = proto - return some(peers[0]) + return Opt.some(peers[0]) trace "No peer found for protocol", protocol = proto - return none(RemotePeerInfo) + return Opt.none(RemotePeerInfo) # Adds a peer to the service slots, which is a list of peers that are slotted for a given protocol proc addServicePeer*(pm: PeerManager, remotePeerInfo: RemotePeerInfo, proto: string) = @@ -439,14 +437,14 @@ proc dialPeer( proto: string, dialTimeout = DefaultDialTimeout, source = "api", -): Future[Option[Connection]] {.async.} = +): Future[Opt[Connection]] {.async.} = if peerId == pm.switch.peerInfo.peerId: error "could not dial self" - return none(Connection) + return Opt.none(Connection) if proto == WakuRelayCodec: error "dial shall not be used to connect to relays" - return none(Connection) + return Opt.none(Connection) trace "Dialing peer", wireAddr = addrs, peerId = peerId, proto = proto @@ -455,7 +453,7 @@ proc dialPeer( let res = catch: if await dialFut.withTimeout(dialTimeout): - return some(dialFut.read()) + return Opt.some(dialFut.read()) else: await cancelAndWait(dialFut) @@ -463,7 +461,7 @@ proc dialPeer( trace "Dialing peer failed", peerId = peerId, reason = reasonFailed, proto = proto - return none(Connection) + return Opt.none(Connection) proc dialPeer*( pm: PeerManager, @@ -471,7 +469,7 @@ proc dialPeer*( proto: string, dialTimeout = DefaultDialTimeout, source = "api", -): Future[Option[Connection]] {.async.} = +): Future[Opt[Connection]] {.async.} = # Dial a given peer and add it to the list of known peers # TODO: check peer validity and score before continuing. Limit number of peers to be managed. @@ -492,7 +490,7 @@ proc dialPeer*( proto: string, dialTimeout = DefaultDialTimeout, source = "api", -): Future[Option[Connection]] {.async.} = +): Future[Opt[Connection]] {.async.} = # Dial an existing peer by looking up it's existing addrs in the switch's peerStore # TODO: check peer validity and score before continuing. Limit number of peers to be managed. @@ -735,20 +733,20 @@ proc getNumStreams*(pm: PeerManager, protocol: string): (int, int) = numStreamsOut += 1 return (numStreamsIn, numStreamsOut) -proc getPeerIp(pm: PeerManager, peerId: PeerId): Option[string] = +proc getPeerIp(pm: PeerManager, peerId: PeerId): Opt[string] = if not pm.switch.connManager.getConnections().hasKey(peerId): - return none(string) + return Opt.none(string) let conns = pm.switch.connManager.getConnections().getOrDefault(peerId) if conns.len == 0: - return none(string) + return Opt.none(string) let obAddr = conns[0].connection.observedAddr.valueOr: - return none(string) + return Opt.none(string) # TODO: think if circuit relay ips should be handled differently - return some(obAddr.getHostname()) + return Opt.some(obAddr.getHostname()) #~~~~~~~~~~~~~~~~~# # Event Handling # @@ -1168,8 +1166,8 @@ proc new*( T: type PeerManager, switch: Switch, wakuMetadata: WakuMetadata = nil, - maxRelayPeers: Option[int] = none(int), - maxServicePeers: Option[int] = none(int), + maxRelayPeers: Opt[int] = Opt.none(int), + maxServicePeers: Opt[int] = Opt.none(int), relayServiceRatio: string = "50:50", storage: PeerStorage = nil, initialBackoffInSec = InitialBackoffInSec, diff --git a/logos_delivery/waku/node/peer_manager/peer_store/waku_peer_storage.nim b/logos_delivery/waku/node/peer_manager/peer_store/waku_peer_storage.nim index bea265d31..f52fd6466 100644 --- a/logos_delivery/waku/node/peer_manager/peer_store/waku_peer_storage.nim +++ b/logos_delivery/waku/node/peer_manager/peer_store/waku_peer_storage.nim @@ -1,12 +1,7 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} import - std/[sets, options], - results, - sqlite3_abi, - eth/p2p/discoveryv5/enr, - libp2p/protobuf/minprotobuf + std/sets, results, sqlite3_abi, eth/p2p/discoveryv5/enr, libp2p/protobuf/minprotobuf import ../../../common/databases/db_sqlite, ../../../waku_core, @@ -51,7 +46,7 @@ proc decode*(T: type RemotePeerInfo, buffer: seq[byte]): ProtoResult[T] = var record: Record if record.fromBytes(rlpBytes): - storedInfo.enr = some(record) + storedInfo.enr = Opt.some(record) ok(storedInfo) diff --git a/logos_delivery/waku/node/peer_manager/waku_peer_store.nim b/logos_delivery/waku/node/peer_manager/waku_peer_store.nim index e4e48f20e..922ce61f4 100644 --- a/logos_delivery/waku/node/peer_manager/waku_peer_store.nim +++ b/logos_delivery/waku/node/peer_manager/waku_peer_store.nim @@ -1,8 +1,8 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} import - std/[tables, sequtils, sets, options, strutils], + results, + std/[tables, sequtils, sets, strutils], chronos, chronicles, eth/p2p/discoveryv5/enr, @@ -57,9 +57,9 @@ proc getPeer*(peerStore: PeerStore, peerId: PeerId): RemotePeerInfo = addrs: addresses, enr: if peerStore[ENRBook][peerId] != default(enr.Record): - some(peerStore[ENRBook][peerId]) + Opt.some(peerStore[ENRBook][peerId]) else: - none(enr.Record), + Opt.none(enr.Record), protocols: peerStore[ProtoBook][peerId], shards: peerStore[ShardBook][peerId], agent: peerStore[AgentBook][peerId], @@ -73,9 +73,9 @@ proc getPeer*(peerStore: PeerStore, peerId: PeerId): RemotePeerInfo = numberFailedConn: peerStore[NumberFailedConnBook][peerId], mixPubKey: if peerStore[MixPubKeyBook][peerId] != default(Curve25519Key): - some(peerStore[MixPubKeyBook][peerId]) + Opt.some(peerStore[MixPubKeyBook][peerId]) else: - none(Curve25519Key), + Opt.none(Curve25519Key), ) proc delete*(peerStore: PeerStore, peerId: PeerId) = diff --git a/logos_delivery/waku/node/subscription_manager.nim b/logos_delivery/waku/node/subscription_manager.nim index 2c18a7b5e..2a0d5cbac 100644 --- a/logos_delivery/waku/node/subscription_manager.nim +++ b/logos_delivery/waku/node/subscription_manager.nim @@ -1,5 +1,5 @@ -import logos_delivery/waku/compat/option_valueor -import std/[sequtils, sets, tables, options], chronos, chronicles, metrics, results +import std/[sequtils, sets, tables], chronos, chronicles, metrics, results + import libp2p/[peerid, peerinfo] import brokers/broker_context @@ -479,7 +479,7 @@ proc selectFilterCandidates( # Start with every filter server peer that can serve the shard var allCandidates = self.node.peerManager.selectPeers( - filter_common.WakuFilterSubscribeCodec, some(shard) + filter_common.WakuFilterSubscribeCodec, Opt.some(shard) ) # Remove all already used in this shard or being filter-subscribed for it diff --git a/logos_delivery/waku/node/waku_metrics.nim b/logos_delivery/waku/node/waku_metrics.nim index 30e5e6a2a..6d3eef5a0 100644 --- a/logos_delivery/waku/node/waku_metrics.nim +++ b/logos_delivery/waku/node/waku_metrics.nim @@ -1,4 +1,3 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} import chronicles, chronos, metrics, metrics/chronos_httpserver diff --git a/logos_delivery/waku/node/waku_node.nim b/logos_delivery/waku/node/waku_node.nim index db90ab47c..b1448eb2a 100644 --- a/logos_delivery/waku/node/waku_node.nim +++ b/logos_delivery/waku/node/waku_node.nim @@ -1,8 +1,7 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} import - std/[options, tables, strutils, sequtils, os, net, random, sets], + std/[tables, strutils, sequtils, os, net, random, sets], chronos, chronicles, metrics, @@ -95,7 +94,7 @@ type WakuInfo* = object # NOTE One for simplicity, can extend later as needed listenAddresses*: seq[string] enrUri*: string #multiaddrStrings*: seq[string] - mixPubKey*: Option[string] + mixPubKey*: Opt[string] # NOTE based on Eth2Node in NBC eth2_network.nim WakuNode* = ref object @@ -118,7 +117,7 @@ type wakuPeerExchange*: WakuPeerExchange wakuPeerExchangeClient*: WakuPeerExchangeClient wakuMetadata*: WakuMetadata - wakuAutoSharding*: Option[Sharding] + wakuAutoSharding*: Opt[Sharding] enr*: enr.Record libp2pPing*: Ping rng*: crypto.Rng @@ -154,7 +153,7 @@ import ./subscription_manager proc deduceRelayShard( node: WakuNode, contentTopic: ContentTopic, - pubsubTopicOp: Option[PubsubTopic] = none[PubsubTopic](), + pubsubTopicOp: Opt[PubsubTopic] = Opt.none(PubsubTopic), ): Result[RelayShard, string] = let pubsubTopic = pubsubTopicOp.valueOr: if node.wakuAutoSharding.isNone(): @@ -264,7 +263,7 @@ proc info*(node: WakuNode): WakuInfo = var wakuInfo = WakuInfo(listenAddresses: listenStr, enrUri: enrUri) if not node.wakuMix.isNil(): let keyStr = node.wakuMix.pubKey.to0xHex() - wakuInfo.mixPubKey = some(keyStr) + wakuInfo.mixPubKey = Opt.some(keyStr) info "node info", wakuInfo return wakuInfo @@ -302,7 +301,7 @@ proc mountAutoSharding*( ): Result[void, string] = info "mounting auto sharding", clusterId = clusterId, shardCount = shardCount node.wakuAutoSharding = - some(Sharding(clusterId: clusterId, shardCountGenZero: shardCount)) + Opt.some(Sharding(clusterId: clusterId, shardCountGenZero: shardCount)) return ok() @@ -519,7 +518,7 @@ proc startProvidersAndListeners*(node: WakuNode) = RequestRelayShard.setProvider( node.brokerCtx, proc( - pubsubTopic: Option[PubsubTopic], contentTopic: ContentTopic + pubsubTopic: Opt[PubsubTopic], contentTopic: ContentTopic ): Result[RequestRelayShard, string] = let shard = node.deduceRelayShard(contentTopic, pubsubTopic).valueOr: return err($error) @@ -565,7 +564,7 @@ proc startProvidersAndListeners*(node: WakuNode) = for contentTopic in topics: var topicHealth = TopicHealth.NOT_SUBSCRIBED - let shardResult = node.deduceRelayShard(contentTopic, none[PubsubTopic]()) + let shardResult = node.deduceRelayShard(contentTopic, Opt.none(PubsubTopic)) if shardResult.isOk(): let shardObj = shardResult.get() diff --git a/logos_delivery/waku/node/waku_node/filter.nim b/logos_delivery/waku/node/waku_node/filter.nim index 4b2ea8494..80557a328 100644 --- a/logos_delivery/waku/node/waku_node/filter.nim +++ b/logos_delivery/waku/node/waku_node/filter.nim @@ -1,8 +1,7 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} import - std/[options, sugar, tables, sequtils, os, net], + std/[sugar, tables, sequtils, os, net], chronos, chronicles, metrics, @@ -54,7 +53,7 @@ proc mountFilter*( maxFilterPeers, maxFilterCriteriaPerPeer, messageCacheTTL, - some(rateLimitSetting), + Opt.some(rateLimitSetting), ) try: @@ -100,7 +99,7 @@ proc mountFilterClient*(node: WakuNode) {.async: (raises: []).} = proc filterSubscribe*( node: WakuNode, - pubsubTopic: Option[PubsubTopic], + pubsubTopic: Opt[PubsubTopic], contentTopics: ContentTopic | seq[ContentTopic], peer: RemotePeerInfo | string, ): Future[FilterSubscribeResult] {.async: (raises: []).} = @@ -184,7 +183,7 @@ proc filterSubscribe*( proc filterUnsubscribe*( node: WakuNode, - pubsubTopic: Option[PubsubTopic], + pubsubTopic: Opt[PubsubTopic], contentTopics: ContentTopic | seq[ContentTopic], peer: RemotePeerInfo | string, ): Future[FilterSubscribeResult] {.async: (raises: []).} = diff --git a/logos_delivery/waku/node/waku_node/lightpush.nim b/logos_delivery/waku/node/waku_node/lightpush.nim index 56d39aae3..ff47796fc 100644 --- a/logos_delivery/waku/node/waku_node/lightpush.nim +++ b/logos_delivery/waku/node/waku_node/lightpush.nim @@ -1,8 +1,7 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} import - std/[hashes, options, strutils, tables, net], + std/[hashes, strutils, tables, net], chronos, chronicles, metrics, @@ -49,8 +48,9 @@ proc mountLegacyLightPush*( info "mounting legacy lightpush with relay" let pushHandler = legacy_lightpush_protocol.getRelayPushHandler(node.wakuRelay) - node.wakuLegacyLightPush = - WakuLegacyLightPush.new(node.peerManager, node.rng, pushHandler, some(rateLimit)) + node.wakuLegacyLightPush = WakuLegacyLightPush.new( + node.peerManager, node.rng, pushHandler, Opt.some(rateLimit) + ) if node.started: # Node has started already. Let's start lightpush too. @@ -90,7 +90,7 @@ proc internalLegacyLightpushPublish( return await node.wakuLegacyLightPush.handleSelfLightPushRequest(pubsubTopic, message) proc resolveLegacyPubsubTopic( - node: WakuNode, pubsubTopic: Option[PubsubTopic], contentTopic: ContentTopic + node: WakuNode, pubsubTopic: Opt[PubsubTopic], contentTopic: ContentTopic ): Result[PubsubTopic, string] = ## Returns the explicit pubsub topic, else derives it from `contentTopic` ## via autosharding. The legacy wire format requires a pubsub topic and the @@ -107,7 +107,7 @@ proc resolveLegacyPubsubTopic( proc runRlnRefreshRetry( node: WakuNode, - rln: Option[Rln], + rln: Opt[Rln], msgWithProof: WakuMessage, pubsubForPublish: PubsubTopic, peer: RemotePeerInfo, @@ -131,7 +131,7 @@ proc runRlnRefreshRetry( proc legacyLightpushPublish*( node: WakuNode, - pubsubTopic: Option[PubsubTopic], + pubsubTopic: Opt[PubsubTopic], message: WakuMessage, peer: RemotePeerInfo, ): Future[legacy_lightpush_protocol.WakuLightPushResult[string]] {.async, gcsafe.} = @@ -149,9 +149,9 @@ proc legacyLightpushPublish*( let rln = if node.rln.isNil(): - none(Rln) + Opt.none(Rln) else: - some(node.rln) + Opt.some(node.rln) let msgWithProof = (await checkAndGenerateRLNProof(rln, message)).valueOr: return err("failed call checkAndGenerateRLNProof from lightpush: " & error) @@ -178,7 +178,7 @@ proc legacyLightpushPublish*( # TODO: Move to application module (e.g., wakunode2.nim) proc legacyLightpushPublish*( - node: WakuNode, pubsubTopic: Option[PubsubTopic], message: WakuMessage + node: WakuNode, pubsubTopic: Opt[PubsubTopic], message: WakuMessage ): Future[legacy_lightpush_protocol.WakuLightPushResult[string]] {. async, gcsafe, deprecated: "Use 'node.legacyLightpushPublish()' instead" .} = @@ -186,7 +186,7 @@ proc legacyLightpushPublish*( error "failed to publish message as legacy lightpush not available" return err("waku legacy lightpush not available") - var peerOpt: Option[RemotePeerInfo] = none(RemotePeerInfo) + var peerOpt: Opt[RemotePeerInfo] = Opt.none(RemotePeerInfo) if not node.wakuLegacyLightpushClient.isNil(): peerOpt = node.peerManager.selectPeer(WakuLegacyLightPushCodec) if peerOpt.isNone(): @@ -194,7 +194,7 @@ proc legacyLightpushPublish*( error "failed to publish message", err = msg return err(msg) elif not node.wakuLegacyLightPush.isNil(): - peerOpt = some(RemotePeerInfo.init($node.switch.peerInfo.peerId)) + peerOpt = Opt.some(RemotePeerInfo.init($node.switch.peerInfo.peerId)) return await node.legacyLightpushPublish(pubsubTopic, message, peer = peerOpt.get()) @@ -210,7 +210,7 @@ proc mountLightPush*( let pushHandler = lightpush_protocol.getRelayPushHandler(node.wakuRelay) node.wakuLightPush = WakuLightPush.new( - node.peerManager, node.rng, pushHandler, node.wakuAutoSharding, some(rateLimit) + node.peerManager, node.rng, pushHandler, node.wakuAutoSharding, Opt.some(rateLimit) ) if node.started: @@ -259,9 +259,11 @@ proc lightpushPublishHandler( "Waku lightpush with mix not available", ) - return await node.wakuLightpushClient.publish(some(pubsubTopic), message, conn) + return + await node.wakuLightpushClient.publish(Opt.some(pubsubTopic), message, conn) else: - return await node.wakuLightpushClient.publish(some(pubsubTopic), message, peer) + return + await node.wakuLightpushClient.publish(Opt.some(pubsubTopic), message, peer) if not node.wakuLightPush.isNil(): if mixify: @@ -275,14 +277,15 @@ proc lightpushPublishHandler( contentTopic = message.contentTopic, target_peer_id = peer.peerId, msg_hash = msgHash - return - await node.wakuLightPush.handleSelfLightPushRequest(some(pubsubTopic), message) + return await node.wakuLightPush.handleSelfLightPushRequest( + Opt.some(pubsubTopic), message + ) proc lightpushPublish*( node: WakuNode, - pubsubTopic: Option[PubsubTopic], + pubsubTopic: Opt[PubsubTopic], message: WakuMessage, - peerOpt: Option[RemotePeerInfo] = none(RemotePeerInfo), + peerOpt: Opt[RemotePeerInfo] = Opt.none(RemotePeerInfo), mixify: bool = false, ): Future[lightpush_protocol.WakuLightPushResult] {.async.} = if node.wakuLightpushClient.isNil() and node.wakuLightPush.isNil(): @@ -330,9 +333,9 @@ proc lightpushPublish*( let rln = if node.rln.isNil(): - none(Rln) + Opt.none(Rln) else: - some(node.rln) + Opt.some(node.rln) let msgWithProof = (await checkAndGenerateRLNProof(rln, message)).valueOr: return lighpushErrorResult(LightPushErrorCode.OUT_OF_RLN_PROOF, error) diff --git a/logos_delivery/waku/node/waku_node/peer_exchange.nim b/logos_delivery/waku/node/waku_node/peer_exchange.nim index cd6e6146c..b77ef3cac 100644 --- a/logos_delivery/waku/node/waku_node/peer_exchange.nim +++ b/logos_delivery/waku/node/waku_node/peer_exchange.nim @@ -1,8 +1,7 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} import - std/[options, tables, net], + std/[tables, net], chronos, chronicles, metrics, @@ -33,13 +32,13 @@ logScope: proc mountPeerExchange*( node: WakuNode, - cluster: Option[uint16] = none(uint16), + cluster: Opt[uint16] = Opt.none(uint16), rateLimit: RateLimitSetting = DefaultGlobalNonRelayRateLimit, ) {.async: (raises: []).} = info "mounting waku peer exchange" node.wakuPeerExchange = - WakuPeerExchange.new(node.peerManager, cluster, some(rateLimit)) + WakuPeerExchange.new(node.peerManager, cluster, Opt.some(rateLimit)) if node.started: try: @@ -65,7 +64,7 @@ proc fetchPeerExchangePeers*( return err( ( status_code: PeerExchangeResponseStatusCode.SERVICE_UNAVAILABLE, - status_desc: some("PeerExchangeClient is not mounted"), + status_desc: Opt.some("PeerExchangeClient is not mounted"), ) ) diff --git a/logos_delivery/waku/node/waku_node/ping.nim b/logos_delivery/waku/node/waku_node/ping.nim index e7e011477..20562b8a9 100644 --- a/logos_delivery/waku/node/waku_node/ping.nim +++ b/logos_delivery/waku/node/waku_node/ping.nim @@ -1,8 +1,6 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} import - std/[options], chronos, chronicles, metrics, diff --git a/logos_delivery/waku/node/waku_node/relay.nim b/logos_delivery/waku/node/waku_node/relay.nim index 77143fabb..715c6e2a9 100644 --- a/logos_delivery/waku/node/waku_node/relay.nim +++ b/logos_delivery/waku/node/waku_node/relay.nim @@ -1,8 +1,7 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} import - std/[options, net], + std/net, chronos, chronicles, metrics, @@ -45,18 +44,18 @@ logScope: proc getTopicOfSubscriptionEvent( node: WakuNode, subscription: SubscriptionEvent -): Result[(PubsubTopic, Option[ContentTopic]), string] = +): Result[(PubsubTopic, Opt[ContentTopic]), string] = case subscription.kind of ContentSub, ContentUnsub: if node.wakuAutoSharding.isSome(): let shard = node.wakuAutoSharding.get().getShard((subscription.topic)).valueOr: return err("Autosharding error: " & error) - return ok(($shard, some(subscription.topic))) + return ok(($shard, Opt.some(subscription.topic))) else: return err("Static sharding is used, relay subscriptions must specify a pubsub topic") of PubsubSub, PubsubUnsub: - return ok((subscription.topic, none[ContentTopic]())) + return ok((subscription.topic, Opt.none(ContentTopic))) else: return err("Unsupported subscription type in relay getTopicOfSubscriptionEvent") @@ -117,7 +116,7 @@ proc isSubscribed*( return ok(node.wakuRelay.isSubscribed(pubsubTopic)) proc publish*( - node: WakuNode, pubsubTopicOp: Option[PubsubTopic], message: WakuMessage + node: WakuNode, pubsubTopicOp: Opt[PubsubTopic], message: WakuMessage ): Future[Result[int, string]] {.async, gcsafe.} = ## Publish a `WakuMessage`. Pubsub topic contains; none, a named or static shard. ## `WakuMessage` should contain a `contentTopic` field for light node functionality. @@ -154,7 +153,7 @@ proc publish*( proc mountRelay*( node: WakuNode, - peerExchangeHandler = none(RoutingRecordsHandler), + peerExchangeHandler = Opt.none(RoutingRecordsHandler), maxMessageSize = int(DefaultMaxWakuMessageSize), ): Future[Result[void, string]] {.async.} = if not node.wakuRelay.isNil(): @@ -188,8 +187,8 @@ proc mountRelay*( proc setRlnValidator*( node: WakuNode, rlnConf: WakuRlnConfig, - spamHandler = none(SpamHandler), - registrationHandler = none(RegistrationHandler), + spamHandler = Opt.none(SpamHandler), + registrationHandler = Opt.none(RegistrationHandler), ) {.async.} = info "setting rln validator" diff --git a/logos_delivery/waku/node/waku_node/store.nim b/logos_delivery/waku/node/waku_node/store.nim index 189ef9052..92d236a37 100644 --- a/logos_delivery/waku/node/waku_node/store.nim +++ b/logos_delivery/waku/node/waku_node/store.nim @@ -1,8 +1,6 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} import - std/[options], chronos, chronicles, metrics, @@ -84,8 +82,8 @@ proc toStoreResult(res: waku_archive.ArchiveResult): StoreQueryResult = res.messages.add(kv) for i in 0 ..< response.messages.len: - res.messages[i].message = some(response.messages[i]) - res.messages[i].pubsubTopic = some(response.topics[i]) + res.messages[i].message = Opt.some(response.messages[i]) + res.messages[i].pubsubTopic = Opt.some(response.topics[i]) res.paginationCursor = response.cursor @@ -109,7 +107,7 @@ proc mountStore*( return response.toStoreResult() node.wakuStore = - store.WakuStore.new(node.peerManager, node.rng, requestHandler, some(rateLimit)) + store.WakuStore.new(node.peerManager, node.rng, requestHandler, Opt.some(rateLimit)) if node.started: await node.wakuStore.start() diff --git a/logos_delivery/waku/node/waku_switch.nim b/logos_delivery/waku/node/waku_switch.nim index 0cba923e4..e0983cbee 100644 --- a/logos_delivery/waku/node/waku_switch.nim +++ b/logos_delivery/waku/node/waku_switch.nim @@ -2,7 +2,7 @@ {.push raises: [].} import - std/options, + results, chronos, chronicles, eth/keys, @@ -56,10 +56,10 @@ proc withWssTransport*( ) proc newWakuSwitch*( - privKey = none(crypto.PrivateKey), + privKey = Opt.none(crypto.PrivateKey), address = MultiAddress.init("/ip4/127.0.0.1/tcp/0").tryGet(), - wsAddress = none(MultiAddress), - quicAddress = none(MultiAddress), + wsAddress = Opt.none(MultiAddress), + quicAddress = Opt.none(MultiAddress), secureManagers: openarray[SecureProtocol] = [SecureProtocol.Noise], transportFlags: set[ServerFlags] = {}, rng: crypto.Rng, @@ -74,8 +74,8 @@ proc newWakuSwitch*( wssEnabled: bool = false, secureKeyPath: string = "", secureCertPath: string = "", - agentString = none(string), # defaults to nim-libp2p version - peerStoreCapacity = none(int), # defaults to 1.25 maxConnections + agentString = Opt.none(string), # defaults to nim-libp2p version + peerStoreCapacity = Opt.none(int), # defaults to 1.25 maxConnections rendezvous: RendezVous = nil, circuitRelay: Relay, ): Switch {.raises: [Defect, IOError, LPError].} = diff --git a/logos_delivery/waku/persistency/backend_comm.nim b/logos_delivery/waku/persistency/backend_comm.nim index 193e52825..d680cc282 100644 --- a/logos_delivery/waku/persistency/backend_comm.nim +++ b/logos_delivery/waku/persistency/backend_comm.nim @@ -21,7 +21,7 @@ {.push raises: [].} -import std/[options, strutils] +import std/strutils import chronos, results import brokers/[event_broker, request_broker, broker_context] import brokers/internal/mt_codec @@ -52,6 +52,40 @@ proc mtUnmarshalValue*( value = Key(s) return true +proc mtMarshalValue*[T]( + buf: ptr UncheckedArray[byte], cap: int, value: Opt[T], pos: var int +): bool {.gcsafe.} = + let present = uint8(if value.isSome(): 1 else: 0) + if not mtMarshalValue(buf, cap, present, pos): + return false + if value.isSome(): + return mtMarshalValue(buf, cap, value.get(), pos) + return true + +proc mtUnmarshalValue*[T]( + buf: ptr UncheckedArray[byte], len: int, value: var Opt[T], pos: var int +): bool {.gcsafe.} = + var present: uint8 + if not mtUnmarshalValue(buf, len, present, pos): + return false + if present == 0: + value = Opt.none(T) + return true + var payload: T + if not mtUnmarshalValue(buf, len, payload, pos): + return false + value = Opt.some(payload) + return true + +proc mtMarshalSizeValue*[T](value: Opt[T]): int {.gcsafe.} = + # Opt[T] is generic: for a copyMem-able T the generic size pass takes the + # sizeof() branch (padding included) while our marshal writes flag+payload. + mixin mtMarshalSizeValue + var size = sizeof(uint8) + if value.isSome(): + size += mtMarshalSizeValue(value.get()) + return size + proc mtMarshalValue*( buf: ptr UncheckedArray[byte], cap: int, value: TxOp, pos: var int ): bool {.gcsafe.} = @@ -103,7 +137,7 @@ EventBroker(mt): RequestBroker(mt): type KvGet* = object - value*: Option[seq[byte]] + value*: Opt[seq[byte]] proc signature*(category: string, key: Key): Future[Result[KvGet, string]] {.async.} diff --git a/logos_delivery/waku/persistency/backend_sqlite.nim b/logos_delivery/waku/persistency/backend_sqlite.nim index 95757bc2c..80920b8df 100644 --- a/logos_delivery/waku/persistency/backend_sqlite.nim +++ b/logos_delivery/waku/persistency/backend_sqlite.nim @@ -4,7 +4,6 @@ ## per-job storage threads driven by brokers; phase 2 verifies the SQL ## itself against an in-memory database. -import std/options import results, sqlite3_abi import ../common/databases/[common, db_sqlite] import ./[types, keys, schema] @@ -192,10 +191,10 @@ proc applyOps*(b: KvBackend, ops: openArray[TxOp]): Result[void, PersistencyErro proc getOne*( b: KvBackend, category: string, key: Key -): Result[Option[seq[byte]], PersistencyError] = - var found: Option[seq[byte]] = none(seq[byte]) +): Result[Opt[seq[byte]], PersistencyError] = + var found: Opt[seq[byte]] = Opt.none(seq[byte]) proc onRow(rs: ptr sqlite3_stmt) {.gcsafe, raises: [].} = - found = some(readBlob(rs, 0.cint)) + found = Opt.some(readBlob(rs, 0.cint)) ?b.db.runRead( "SELECT payload FROM kv WHERE category = ? AND key = ? LIMIT 1;", diff --git a/logos_delivery/waku/persistency/backend_thread.nim b/logos_delivery/waku/persistency/backend_thread.nim index 28f328729..0dbee93e6 100644 --- a/logos_delivery/waku/persistency/backend_thread.nim +++ b/logos_delivery/waku/persistency/backend_thread.nim @@ -18,7 +18,7 @@ ## refc ref-count traffic across threads. The arg is freed by ## ``stopStorageThread`` after ``joinThread`` returns. -import std/[options, os] +import std/os import std/atomics # std/concurrency/atomics is the same module in Nim 2.2 import chronos, chronicles, results import brokers/[event_broker, request_broker, broker_context] diff --git a/logos_delivery/waku/persistency/persistency.nim b/logos_delivery/waku/persistency/persistency.nim index d6ac28a1e..46ce7622e 100644 --- a/logos_delivery/waku/persistency/persistency.nim +++ b/logos_delivery/waku/persistency/persistency.nim @@ -1,4 +1,3 @@ -import logos_delivery/waku/compat/option_valueor ## Public facade and main driver types for the persistency library. ## ## ``Persistency`` is the per-root coordinator; one instance owns one @@ -41,7 +40,7 @@ import logos_delivery/waku/compat/option_valueor {.push raises: [].} -import std/[locks, options, os, sequtils, tables] +import std/[locks, os, sequtils, tables] import chronos, chronicles, results import brokers/[event_broker, request_broker, broker_context] import ./[types, keys, payload, backend_comm, backend_thread] @@ -362,7 +361,7 @@ template liftErr(s: string): PersistencyError = proc get*( t: Job, category: string, key: Key -): Future[Result[Option[seq[byte]], PersistencyError]] {.async.} = +): Future[Result[Opt[seq[byte]], PersistencyError]] {.async.} = let r = (await KvGet.request(t.context, category, key)).valueOr: return err(liftErr(error)) return ok(r.value) @@ -409,7 +408,7 @@ proc deleteAcked*( proc get*( p: Persistency, jobId: string, category: string, key: Key -): Future[Result[Option[seq[byte]], PersistencyError]] {.async.} = +): Future[Result[Opt[seq[byte]], PersistencyError]] {.async.} = let j = ?p.job(jobId) return await j.get(category, key) diff --git a/logos_delivery/waku/persistency/sds_persistency.nim b/logos_delivery/waku/persistency/sds_persistency.nim index 3c44f7802..f9d834ff3 100644 --- a/logos_delivery/waku/persistency/sds_persistency.nim +++ b/logos_delivery/waku/persistency/sds_persistency.nim @@ -53,7 +53,7 @@ {.push raises: [].} -import std/[algorithm, options] +import std/algorithm import chronos, chronicles, results import libp2p/protobuf/minprotobuf import ./persistency diff --git a/logos_delivery/waku/requests/node_requests.nim b/logos_delivery/waku/requests/node_requests.nim index a5ca263cd..5d6cebbce 100644 --- a/logos_delivery/waku/requests/node_requests.nim +++ b/logos_delivery/waku/requests/node_requests.nim @@ -1,5 +1,4 @@ -import std/options -import brokers/[request_broker, multi_request_broker] +import results, brokers/[request_broker, multi_request_broker] import logos_delivery/waku/waku_core/[topics] RequestBroker(sync): @@ -7,5 +6,5 @@ RequestBroker(sync): relayShard*: RelayShard proc signature( - pubsubTopic: Option[PubsubTopic], contentTopic: ContentTopic + pubsubTopic: Opt[PubsubTopic], contentTopic: ContentTopic ): Result[RequestRelayShard, string] diff --git a/logos_delivery/waku/rest_api/endpoint/admin/handlers.nim b/logos_delivery/waku/rest_api/endpoint/admin/handlers.nim index f49b75652..a0ba93f5c 100644 --- a/logos_delivery/waku/rest_api/endpoint/admin/handlers.nim +++ b/logos_delivery/waku/rest_api/endpoint/admin/handlers.nim @@ -1,8 +1,9 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} import std/[sets, strformat, sequtils, tables], + std/options, + results, chronicles, chronicles/topics_registry, json_serialization, @@ -70,7 +71,7 @@ proc tuplesToWakuPeers(peers: var WakuPeers, peersTup: seq[PeerProtocolTuple]) = ) proc populateAdminPeerInfo( - peers: var WakuPeers, node: WakuNode, codec: Option[string] = none[string]() + peers: var WakuPeers, node: WakuNode, codec: Opt[string] = Opt.none(string) ) = if codec.isNone(): peers = node.peerManager.switch.peerStore.peers().mapIt(WakuPeer.init(it)) @@ -96,7 +97,7 @@ proc populateAdminPeerInfoForCodecs(node: WakuNode, codecs: seq[string]): WakuPe var peers: WakuPeers = @[] for codec in codecs: - populateAdminPeerInfo(peers, node, some(codec)) + populateAdminPeerInfo(peers, node, Opt.some(codec)) return peers diff --git a/logos_delivery/waku/rest_api/endpoint/admin/types.nim b/logos_delivery/waku/rest_api/endpoint/admin/types.nim index 846f5a2fa..4af1bdf7b 100644 --- a/logos_delivery/waku/rest_api/endpoint/admin/types.nim +++ b/logos_delivery/waku/rest_api/endpoint/admin/types.nim @@ -3,7 +3,7 @@ import chronicles, json_serialization, - json_serialization/std/options, + json_serialization/pkg/results, json_serialization/lexer, results, libp2p/protocols/pubsub/pubsubpeer @@ -17,7 +17,7 @@ type WakuPeer* = object connected*: Connectedness agent*: string origin*: PeerOrigin - score*: Option[float64] + score*: Opt[float64] type WakuPeers* = seq[WakuPeer] @@ -97,44 +97,44 @@ proc readValue*( reader: var JsonReader[RestJson], value: var WakuPeer ) {.gcsafe, raises: [SerializationError, IOError].} = var - multiaddr: Option[string] - protocols: Option[seq[string]] - shards: Option[seq[uint16]] - connected: Option[Connectedness] - agent: Option[string] - origin: Option[PeerOrigin] - score: Option[float64] + multiaddr: Opt[string] + protocols: Opt[seq[string]] + shards: Opt[seq[uint16]] + connected: Opt[Connectedness] + agent: Opt[string] + origin: Opt[PeerOrigin] + score: Opt[float64] for fieldName in readObjectFields(reader): case fieldName of "multiaddr": if multiaddr.isSome(): reader.raiseUnexpectedField("Multiple `multiaddr` fields found", "WakuPeer") - multiaddr = some(reader.readValue(string)) + multiaddr = Opt.some(reader.readValue(string)) of "protocols": if protocols.isSome(): reader.raiseUnexpectedField("Multiple `protocols` fields found", "WakuPeer") - protocols = some(reader.readValue(seq[string])) + protocols = Opt.some(reader.readValue(seq[string])) of "shards": if shards.isSome(): reader.raiseUnexpectedField("Multiple `shards` fields found", "WakuPeer") - shards = some(reader.readValue(seq[uint16])) + shards = Opt.some(reader.readValue(seq[uint16])) of "connected": if connected.isSome(): reader.raiseUnexpectedField("Multiple `connected` fields found", "WakuPeer") - connected = some(reader.readValue(Connectedness)) + connected = Opt.some(reader.readValue(Connectedness)) of "agent": if agent.isSome(): reader.raiseUnexpectedField("Multiple `agent` fields found", "WakuPeer") - agent = some(reader.readValue(string)) + agent = Opt.some(reader.readValue(string)) of "origin": if origin.isSome(): reader.raiseUnexpectedField("Multiple `origin` fields found", "WakuPeer") - origin = some(reader.readValue(PeerOrigin)) + origin = Opt.some(reader.readValue(PeerOrigin)) of "score": if score.isSome(): reader.raiseUnexpectedField("Multiple `score` fields found", "WakuPeer") - score = some(reader.readValue(float64)) + score = Opt.some(reader.readValue(float64)) else: unrecognizedFieldWarning(value) @@ -170,19 +170,19 @@ proc readValue*( reader: var JsonReader[RestJson], value: var PeersOfShard ) {.gcsafe, raises: [SerializationError, IOError].} = var - shard: Option[uint16] - peers: Option[WakuPeers] + shard: Opt[uint16] + peers: Opt[WakuPeers] for fieldName in readObjectFields(reader): case fieldName of "shard": if shard.isSome(): reader.raiseUnexpectedField("Multiple `shard` fields found", "PeersOfShard") - shard = some(reader.readValue(uint16)) + shard = Opt.some(reader.readValue(uint16)) of "peers": if peers.isSome(): reader.raiseUnexpectedField("Multiple `peers` fields found", "PeersOfShard") - peers = some(reader.readValue(WakuPeers)) + peers = Opt.some(reader.readValue(WakuPeers)) else: unrecognizedFieldWarning(value) @@ -198,8 +198,8 @@ proc readValue*( reader: var JsonReader[RestJson], value: var FilterTopic ) {.gcsafe, raises: [SerializationError, IOError].} = var - pubsubTopic: Option[string] - contentTopic: Option[string] + pubsubTopic: Opt[string] + contentTopic: Opt[string] for fieldName in readObjectFields(reader): case fieldName @@ -208,13 +208,13 @@ proc readValue*( reader.raiseUnexpectedField( "Multiple `pubsubTopic` fields found", "FilterTopic" ) - pubsubTopic = some(reader.readValue(string)) + pubsubTopic = Opt.some(reader.readValue(string)) of "contentTopic": if contentTopic.isSome(): reader.raiseUnexpectedField( "Multiple `contentTopic` fields found", "FilterTopic" ) - contentTopic = some(reader.readValue(string)) + contentTopic = Opt.some(reader.readValue(string)) else: unrecognizedFieldWarning(value) @@ -230,8 +230,8 @@ proc readValue*( reader: var JsonReader[RestJson], value: var FilterSubscription ) {.gcsafe, raises: [SerializationError, IOError].} = var - peerId: Option[string] - filterCriteria: Option[seq[FilterTopic]] + peerId: Opt[string] + filterCriteria: Opt[seq[FilterTopic]] for fieldName in readObjectFields(reader): case fieldName @@ -240,13 +240,13 @@ proc readValue*( reader.raiseUnexpectedField( "Multiple `peerId` fields found", "FilterSubscription" ) - peerId = some(reader.readValue(string)) + peerId = Opt.some(reader.readValue(string)) of "filterCriteria": if filterCriteria.isSome(): reader.raiseUnexpectedField( "Multiple `filterCriteria` fields found", "FilterSubscription" ) - filterCriteria = some(reader.readValue(seq[FilterTopic])) + filterCriteria = Opt.some(reader.readValue(seq[FilterTopic])) else: unrecognizedFieldWarning(value) @@ -284,7 +284,7 @@ proc init*(T: type WakuPeer, peerInfo: RemotePeerInfo): WakuPeer = connected: peerInfo.connectedness, agent: peerInfo.agent, origin: peerInfo.origin, - score: none(float64), + score: Opt.none(float64), ) proc init*(T: type WakuPeer, pubsubPeer: PubSubPeer, pm: PeerManager): WakuPeer = @@ -296,7 +296,7 @@ proc init*(T: type WakuPeer, pubsubPeer: PubSubPeer, pm: PeerManager): WakuPeer connected: peerInfo.connectedness, agent: peerInfo.agent, origin: peerInfo.origin, - score: some(pubsubPeer.score), + score: Opt.some(pubsubPeer.score), ) proc add*( diff --git a/logos_delivery/waku/rest_api/endpoint/builder.nim b/logos_delivery/waku/rest_api/endpoint/builder.nim index f9bc1da89..2914833d9 100644 --- a/logos_delivery/waku/rest_api/endpoint/builder.nim +++ b/logos_delivery/waku/rest_api/endpoint/builder.nim @@ -1,7 +1,6 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} -import net, tables +import results, net, tables import presto import logos_delivery/waku/waku_node, @@ -82,9 +81,9 @@ proc startRestServerEssentials*( let allowedOrigin = if len(conf.allowOrigin) > 0: - some(conf.allowOrigin.join(",")) + Opt.some(conf.allowOrigin.join(",")) else: - none(string) + Opt.none(string) let address = conf.listenAddress let port = conf.port @@ -179,9 +178,9 @@ proc startRestServerProtocolSupport*( let filterDiscoHandler = if not wakuDiscv5.isNil(): - some(defaultDiscoveryHandler(wakuDiscv5, Filter)) + Opt.some(defaultDiscoveryHandler(wakuDiscv5, Filter)) else: - none(DiscoveryHandler) + Opt.none(DiscoveryHandler) rest_filter_endpoint.installFilterRestApiHandlers( router, node, filterCache, filterDiscoHandler @@ -192,9 +191,9 @@ proc startRestServerProtocolSupport*( ## Store REST API let storeDiscoHandler = if not wakuDiscv5.isNil(): - some(defaultDiscoveryHandler(wakuDiscv5, Store)) + Opt.some(defaultDiscoveryHandler(wakuDiscv5, Store)) else: - none(DiscoveryHandler) + Opt.none(DiscoveryHandler) rest_store_endpoint.installStoreApiHandlers(router, node, storeDiscoHandler) @@ -206,9 +205,9 @@ proc startRestServerProtocolSupport*( (lightPushEnabled and node.wakuLegacyLightPush != nil and node.wakuRelay != nil): let lightDiscoHandler = if not wakuDiscv5.isNil(): - some(defaultDiscoveryHandler(wakuDiscv5, Lightpush)) + Opt.some(defaultDiscoveryHandler(wakuDiscv5, Lightpush)) else: - none(DiscoveryHandler) + Opt.none(DiscoveryHandler) rest_legacy_lightpush_endpoint.installLightPushRequestHandler( router, node, lightDiscoHandler diff --git a/logos_delivery/waku/rest_api/endpoint/debug/client.nim b/logos_delivery/waku/rest_api/endpoint/debug/client.nim index c2d588197..7249c767d 100644 --- a/logos_delivery/waku/rest_api/endpoint/debug/client.nim +++ b/logos_delivery/waku/rest_api/endpoint/debug/client.nim @@ -1,7 +1,7 @@ {.push raises: [].} import - chronicles, json_serialization, json_serialization/std/options, presto/[route, client] + chronicles, json_serialization, json_serialization/pkg/results, presto/[route, client] import ../serdes, ../rest_serdes, ./types export types diff --git a/logos_delivery/waku/rest_api/endpoint/debug/handlers.nim b/logos_delivery/waku/rest_api/endpoint/debug/handlers.nim index ee63511f5..43b6fbbf1 100644 --- a/logos_delivery/waku/rest_api/endpoint/debug/handlers.nim +++ b/logos_delivery/waku/rest_api/endpoint/debug/handlers.nim @@ -1,4 +1,3 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} import chronicles, json_serialization, presto/route diff --git a/logos_delivery/waku/rest_api/endpoint/debug/types.nim b/logos_delivery/waku/rest_api/endpoint/debug/types.nim index c03af0675..d8d0f375d 100644 --- a/logos_delivery/waku/rest_api/endpoint/debug/types.nim +++ b/logos_delivery/waku/rest_api/endpoint/debug/types.nim @@ -1,6 +1,6 @@ {.push raises: [].} -import chronicles, json_serialization, json_serialization/std/options +import results, chronicles, json_serialization, json_serialization/pkg/results import ../../../waku_node, ../serdes import std/typetraits @@ -8,15 +8,15 @@ import std/typetraits type DebugWakuInfo* = object listenAddresses*: seq[string] - enrUri*: Option[string] - mixPubKey*: Option[string] + enrUri*: Opt[string] + mixPubKey*: Opt[string] #### Type conversion proc toDebugWakuInfo*(nodeInfo: WakuInfo): DebugWakuInfo = DebugWakuInfo( listenAddresses: nodeInfo.listenAddresses, - enrUri: some(nodeInfo.enrUri), + enrUri: Opt.some(nodeInfo.enrUri), mixPubKey: nodeInfo.mixPubKey, ) @@ -37,8 +37,8 @@ proc readValue*( reader: var JsonReader[RestJson], value: var DebugWakuInfo ) {.raises: [SerializationError, IOError].} = var - listenAddresses: Option[seq[string]] - enrUri: Option[string] + listenAddresses: Opt[seq[string]] + enrUri: Opt[string] for fieldName in readObjectFields(reader): case fieldName @@ -47,17 +47,17 @@ proc readValue*( reader.raiseUnexpectedField( "Multiple `listenAddresses` fields found", "DebugWakuInfo" ) - listenAddresses = some(reader.readValue(seq[string])) + listenAddresses = Opt.some(reader.readValue(seq[string])) of "enrUri": if enrUri.isSome(): reader.raiseUnexpectedField("Multiple `enrUri` fields found", "DebugWakuInfo") - enrUri = some(reader.readValue(string)) + enrUri = Opt.some(reader.readValue(string)) of "mixPubKey": if value.mixPubKey.isSome(): reader.raiseUnexpectedField( "Multiple `mixPubKey` fields found", "DebugWakuInfo" ) - value.mixPubKey = some(reader.readValue(string)) + value.mixPubKey = Opt.some(reader.readValue(string)) else: unrecognizedFieldWarning(value) diff --git a/logos_delivery/waku/rest_api/endpoint/filter/client.nim b/logos_delivery/waku/rest_api/endpoint/filter/client.nim index db1a6895e..de2b1bebe 100644 --- a/logos_delivery/waku/rest_api/endpoint/filter/client.nim +++ b/logos_delivery/waku/rest_api/endpoint/filter/client.nim @@ -5,7 +5,7 @@ import stew/byteutils, chronicles, json_serialization, - json_serialization/std/options, + json_serialization/pkg/results, presto/[route, client, common] import ../../../common/base64, ../serdes, ../rest_serdes, ./types diff --git a/logos_delivery/waku/rest_api/endpoint/filter/handlers.nim b/logos_delivery/waku/rest_api/endpoint/filter/handlers.nim index 60a16dfb3..fc8149999 100644 --- a/logos_delivery/waku/rest_api/endpoint/filter/handlers.nim +++ b/logos_delivery/waku/rest_api/endpoint/filter/handlers.nim @@ -1,13 +1,14 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} import std/strformat, std/sequtils, + std/options, + results, stew/byteutils, chronicles, json_serialization, - json_serialization/std/options, + json_serialization/pkg/results, presto/route, presto/common import @@ -167,7 +168,7 @@ proc filterPostPutSubscriptionRequestHandler( node: WakuNode, contentBody: Option[ContentBody], cache: MessageCache, - discHandler: Option[DiscoveryHandler] = none(DiscoveryHandler), + discHandler: Opt[DiscoveryHandler] = Opt.none(DiscoveryHandler), ): Future[RestApiResponse] {.async.} = ## handles any filter subscription requests, adds or modifies. @@ -208,7 +209,7 @@ proc installFilterPostSubscriptionsHandler( router: var RestRouter, node: WakuNode, cache: MessageCache, - discHandler: Option[DiscoveryHandler] = none(DiscoveryHandler), + discHandler: Opt[DiscoveryHandler] = Opt.none(DiscoveryHandler), ) = router.api(MethodPost, ROUTE_FILTER_SUBSCRIPTIONS) do( contentBody: Option[ContentBody] @@ -224,7 +225,7 @@ proc installFilterPutSubscriptionsHandler( router: var RestRouter, node: WakuNode, cache: MessageCache, - discHandler: Option[DiscoveryHandler] = none(DiscoveryHandler), + discHandler: Opt[DiscoveryHandler] = Opt.none(DiscoveryHandler), ) = router.api(MethodPut, ROUTE_FILTER_SUBSCRIPTIONS) do( contentBody: Option[ContentBody] @@ -240,7 +241,7 @@ proc installFilterDeleteSubscriptionsHandler( router: var RestRouter, node: WakuNode, cache: MessageCache, - discHandler: Option[DiscoveryHandler] = none(DiscoveryHandler), + discHandler: Opt[DiscoveryHandler] = Opt.none(DiscoveryHandler), ) = router.api(MethodDelete, ROUTE_FILTER_SUBSCRIPTIONS) do( contentBody: Option[ContentBody] @@ -288,7 +289,7 @@ proc installFilterDeleteAllSubscriptionsHandler( router: var RestRouter, node: WakuNode, cache: MessageCache, - discHandler: Option[DiscoveryHandler] = none(DiscoveryHandler), + discHandler: Opt[DiscoveryHandler] = Opt.none(DiscoveryHandler), ) = router.api(MethodDelete, ROUTE_FILTER_ALL_SUBSCRIPTIONS) do( contentBody: Option[ContentBody] @@ -335,7 +336,7 @@ const ROUTE_FILTER_SUBSCRIBER_PING* = "/filter/v2/subscriptions/{requestId}" proc installFilterPingSubscriberHandler( router: var RestRouter, node: WakuNode, - discHandler: Option[DiscoveryHandler] = none(DiscoveryHandler), + discHandler: Opt[DiscoveryHandler] = Opt.none(DiscoveryHandler), ) = router.api(MethodGet, ROUTE_FILTER_SUBSCRIBER_PING) do( requestId: string @@ -402,7 +403,7 @@ proc installFilterRestApiHandlers*( router: var RestRouter, node: WakuNode, cache: MessageCache, - discHandler: Option[DiscoveryHandler] = none(DiscoveryHandler), + discHandler: Opt[DiscoveryHandler] = Opt.none(DiscoveryHandler), ) = installFilterPingSubscriberHandler(router, node, discHandler) installFilterPostSubscriptionsHandler(router, node, cache, discHandler) diff --git a/logos_delivery/waku/rest_api/endpoint/filter/types.nim b/logos_delivery/waku/rest_api/endpoint/filter/types.nim index 6d18e7f6e..675423daf 100644 --- a/logos_delivery/waku/rest_api/endpoint/filter/types.nim +++ b/logos_delivery/waku/rest_api/endpoint/filter/types.nim @@ -1,10 +1,11 @@ {.push raises: [].} import + results, std/[sets, strformat], chronicles, json_serialization, - json_serialization/std/options, + json_serialization/pkg/results, presto/[route, client, common], libp2p/peerid import ../../../common/base64, ../../../waku_core, ../serdes @@ -13,17 +14,17 @@ import ../../../common/base64, ../../../waku_core, ../serdes type FilterWakuMessage* = object payload*: Base64String - contentTopic*: Option[ContentTopic] - version*: Option[Natural] - timestamp*: Option[int64] - meta*: Option[Base64String] - ephemeral*: Option[bool] + contentTopic*: Opt[ContentTopic] + version*: Opt[Natural] + timestamp*: Opt[int64] + meta*: Opt[Base64String] + ephemeral*: Opt[bool] type FilterGetMessagesResponse* = seq[FilterWakuMessage] type FilterLegacySubscribeRequest* = object # Subscription request for legacy filter support - pubsubTopic*: Option[PubSubTopic] + pubsubTopic*: Opt[PubSubTopic] contentFilters*: seq[ContentTopic] type FilterSubscriberPing* = object @@ -31,12 +32,12 @@ type FilterSubscriberPing* = object type FilterSubscribeRequest* = object requestId*: string - pubsubTopic*: Option[PubSubTopic] + pubsubTopic*: Opt[PubSubTopic] contentFilters*: seq[ContentTopic] type FilterUnsubscribeRequest* = object requestId*: string - pubsubTopic*: Option[PubSubTopic] + pubsubTopic*: Opt[PubSubTopic] contentFilters*: seq[ContentTopic] type FilterUnsubscribeAllRequest* = object @@ -51,15 +52,15 @@ type FilterSubscriptionResponse* = object proc toFilterWakuMessage*(msg: WakuMessage): FilterWakuMessage = FilterWakuMessage( payload: base64.encode(msg.payload), - contentTopic: some(msg.contentTopic), - version: some(Natural(msg.version)), - timestamp: some(msg.timestamp), + contentTopic: Opt.some(msg.contentTopic), + version: Opt.some(Natural(msg.version)), + timestamp: Opt.some(msg.timestamp), meta: if msg.meta.len > 0: - some(base64.encode(msg.meta)) + Opt.some(base64.encode(msg.meta)) else: - none(Base64String), - ephemeral: some(msg.ephemeral), + Opt.none(Base64String), + ephemeral: Opt.some(msg.ephemeral), ) proc toWakuMessage*(msg: FilterWakuMessage, version = 0): Result[WakuMessage, string] = @@ -155,12 +156,12 @@ proc readValue*( reader: var JsonReader[RestJson], value: var FilterWakuMessage ) {.raises: [SerializationError, IOError].} = var - payload = none(Base64String) - contentTopic = none(ContentTopic) - version = none(Natural) - timestamp = none(int64) - meta = none(Base64String) - ephemeral = none(bool) + payload = Opt.none(Base64String) + contentTopic = Opt.none(ContentTopic) + version = Opt.none(Natural) + timestamp = Opt.none(int64) + meta = Opt.none(Base64String) + ephemeral = Opt.none(bool) var keys = initHashSet[string]() for fieldName in readObjectFields(reader): @@ -175,17 +176,17 @@ proc readValue*( case fieldName of "payload": - payload = some(reader.readValue(Base64String)) + payload = Opt.some(reader.readValue(Base64String)) of "contentTopic": - contentTopic = some(reader.readValue(ContentTopic)) + contentTopic = Opt.some(reader.readValue(ContentTopic)) of "version": - version = some(reader.readValue(Natural)) + version = Opt.some(reader.readValue(Natural)) of "timestamp": - timestamp = some(reader.readValue(int64)) + timestamp = Opt.some(reader.readValue(int64)) of "meta": - meta = some(reader.readValue(Base64String)) + meta = Opt.some(reader.readValue(Base64String)) of "ephemeral": - ephemeral = some(reader.readValue(bool)) + ephemeral = Opt.some(reader.readValue(bool)) else: unrecognizedFieldWarning(value) @@ -205,8 +206,8 @@ proc readValue*( reader: var JsonReader[RestJson], value: var FilterLegacySubscribeRequest ) {.raises: [SerializationError, IOError].} = var - pubsubTopic = none(PubsubTopic) - contentFilters = none(seq[ContentTopic]) + pubsubTopic = Opt.none(PubsubTopic) + contentFilters = Opt.none(seq[ContentTopic]) var keys = initHashSet[string]() for fieldName in readObjectFields(reader): @@ -221,9 +222,9 @@ proc readValue*( case fieldName of "pubsubTopic": - pubsubTopic = some(reader.readValue(PubsubTopic)) + pubsubTopic = Opt.some(reader.readValue(PubsubTopic)) of "contentFilters": - contentFilters = some(reader.readValue(seq[ContentTopic])) + contentFilters = Opt.some(reader.readValue(seq[ContentTopic])) else: unrecognizedFieldWarning(value) @@ -236,16 +237,16 @@ proc readValue*( value = FilterLegacySubscribeRequest( pubsubTopic: if pubsubTopic.isNone() or pubsubTopic.get() == "": - none(string) + Opt.none(string) else: - some(pubsubTopic.get()), + Opt.some(pubsubTopic.get()), contentFilters: contentFilters.get(), ) proc readValue*( reader: var JsonReader[RestJson], value: var FilterSubscriberPing ) {.raises: [SerializationError, IOError].} = - var requestId = none(string) + var requestId = Opt.none(string) var keys = initHashSet[string]() for fieldName in readObjectFields(reader): @@ -260,7 +261,7 @@ proc readValue*( case fieldName of "requestId": - requestId = some(reader.readValue(string)) + requestId = Opt.some(reader.readValue(string)) else: unrecognizedFieldWarning(value) @@ -273,9 +274,9 @@ proc readValue*( reader: var JsonReader[RestJson], value: var FilterSubscribeRequest ) {.raises: [SerializationError, IOError].} = var - requestId = none(string) - pubsubTopic = none(PubsubTopic) - contentFilters = none(seq[ContentTopic]) + requestId = Opt.none(string) + pubsubTopic = Opt.none(PubsubTopic) + contentFilters = Opt.none(seq[ContentTopic]) var keys = initHashSet[string]() for fieldName in readObjectFields(reader): @@ -290,11 +291,11 @@ proc readValue*( case fieldName of "requestId": - requestId = some(reader.readValue(string)) + requestId = Opt.some(reader.readValue(string)) of "pubsubTopic": - pubsubTopic = some(reader.readValue(PubsubTopic)) + pubsubTopic = Opt.some(reader.readValue(PubsubTopic)) of "contentFilters": - contentFilters = some(reader.readValue(seq[ContentTopic])) + contentFilters = Opt.some(reader.readValue(seq[ContentTopic])) else: unrecognizedFieldWarning(value) @@ -311,9 +312,9 @@ proc readValue*( requestId: requestId.get(), pubsubTopic: if pubsubTopic.isNone() or pubsubTopic.get() == "": - none(string) + Opt.none(string) else: - some(pubsubTopic.get()), + Opt.some(pubsubTopic.get()), contentFilters: contentFilters.get(), ) @@ -321,9 +322,9 @@ proc readValue*( reader: var JsonReader[RestJson], value: var FilterUnsubscribeRequest ) {.raises: [SerializationError, IOError].} = var - requestId = none(string) - pubsubTopic = none(PubsubTopic) - contentFilters = none(seq[ContentTopic]) + requestId = Opt.none(string) + pubsubTopic = Opt.none(PubsubTopic) + contentFilters = Opt.none(seq[ContentTopic]) var keys = initHashSet[string]() for fieldName in readObjectFields(reader): @@ -338,11 +339,11 @@ proc readValue*( case fieldName of "requestId": - requestId = some(reader.readValue(string)) + requestId = Opt.some(reader.readValue(string)) of "pubsubTopic": - pubsubTopic = some(reader.readValue(PubsubTopic)) + pubsubTopic = Opt.some(reader.readValue(PubsubTopic)) of "contentFilters": - contentFilters = some(reader.readValue(seq[ContentTopic])) + contentFilters = Opt.some(reader.readValue(seq[ContentTopic])) else: unrecognizedFieldWarning(value) @@ -359,16 +360,16 @@ proc readValue*( requestId: requestId.get(), pubsubTopic: if pubsubTopic.isNone() or pubsubTopic.get() == "": - none(string) + Opt.none(string) else: - some(pubsubTopic.get()), + Opt.some(pubsubTopic.get()), contentFilters: contentFilters.get(), ) proc readValue*( reader: var JsonReader[RestJson], value: var FilterUnsubscribeAllRequest ) {.raises: [SerializationError, IOError].} = - var requestId = none(string) + var requestId = Opt.none(string) var keys = initHashSet[string]() for fieldName in readObjectFields(reader): @@ -383,7 +384,7 @@ proc readValue*( case fieldName of "requestId": - requestId = some(reader.readValue(string)) + requestId = Opt.some(reader.readValue(string)) else: unrecognizedFieldWarning(value) @@ -396,8 +397,8 @@ proc readValue*( reader: var JsonReader[RestJson], value: var FilterSubscriptionResponse ) {.raises: [SerializationError, IOError].} = var - requestId = none(string) - statusDesc = none(string) + requestId = Opt.none(string) + statusDesc = Opt.none(string) var keys = initHashSet[string]() for fieldName in readObjectFields(reader): @@ -412,9 +413,9 @@ proc readValue*( case fieldName of "requestId": - requestId = some(reader.readValue(string)) + requestId = Opt.some(reader.readValue(string)) of "statusDesc": - statusDesc = some(reader.readValue(string)) + statusDesc = Opt.some(reader.readValue(string)) else: unrecognizedFieldWarning(value) diff --git a/logos_delivery/waku/rest_api/endpoint/health/handlers.nim b/logos_delivery/waku/rest_api/endpoint/health/handlers.nim index 955e599d9..dc7588d16 100644 --- a/logos_delivery/waku/rest_api/endpoint/health/handlers.nim +++ b/logos_delivery/waku/rest_api/endpoint/health/handlers.nim @@ -1,4 +1,3 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} import chronicles, json_serialization, presto/route diff --git a/logos_delivery/waku/rest_api/endpoint/health/types.nim b/logos_delivery/waku/rest_api/endpoint/health/types.nim index c32a0c778..23feef93f 100644 --- a/logos_delivery/waku/rest_api/endpoint/health/types.nim +++ b/logos_delivery/waku/rest_api/endpoint/health/types.nim @@ -1,8 +1,6 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} -import results -import chronicles, json_serialization, json_serialization/std/options +import results, chronicles, json_serialization, json_serialization/pkg/results import ../serdes import logos_delivery/api/types import logos_delivery/waku/[waku_node, node/health_monitor] @@ -20,14 +18,14 @@ proc writeValue*( proc readValue*( reader: var JsonReader[RestJson], value: var ProtocolHealth ) {.gcsafe, raises: [SerializationError, IOError].} = - var protocol = none[string]() - var health = none[HealthStatus]() - var desc = none[string]() + var protocol = Opt.none(string) + var health = Opt.none(HealthStatus) + var desc = Opt.none(string) for fieldName in readObjectFields(reader): if fieldName == "desc": if desc.isSome(): reader.raiseUnexpectedField("Multiple `desc` fields found", "ProtocolHealth") - desc = some(reader.readValue(string)) + desc = Opt.some(reader.readValue(string)) else: if protocol.isSome(): reader.raiseUnexpectedField( @@ -37,8 +35,8 @@ proc readValue*( let fieldValue = reader.readValue(string) let h = HealthStatus.init(fieldValue).valueOr: reader.raiseUnexpectedValue("Invalid `health` value: " & $error) - health = some(h) - protocol = some(fieldName) + health = Opt.some(h) + protocol = Opt.some(fieldName) value = ProtocolHealth(protocol: protocol.get(), health: health.get(), desc: desc) @@ -55,9 +53,9 @@ proc readValue*( reader: var JsonReader[RestJson], value: var HealthReport ) {.raises: [SerializationError, IOError].} = var - nodeHealth: Option[HealthStatus] - connectionStatus: Option[ConnectionStatus] - protocolsHealth: Option[seq[ProtocolHealth]] + nodeHealth: Opt[HealthStatus] + connectionStatus: Opt[ConnectionStatus] + protocolsHealth: Opt[seq[ProtocolHealth]] for fieldName in readObjectFields(reader): case fieldName @@ -70,7 +68,7 @@ proc readValue*( let health = HealthStatus.init(reader.readValue(string)).valueOr: reader.raiseUnexpectedValue("Invalid `health` value: " & $error) - nodeHealth = some(health) + nodeHealth = Opt.some(health) of "connectionStatus": if connectionStatus.isSome(): reader.raiseUnexpectedField( @@ -80,14 +78,14 @@ proc readValue*( let state = ConnectionStatus.init(reader.readValue(string)).valueOr: reader.raiseUnexpectedValue("Invalid `connectionStatus` value: " & $error) - connectionStatus = some(state) + connectionStatus = Opt.some(state) of "protocolsHealth": if protocolsHealth.isSome(): reader.raiseUnexpectedField( "Multiple `protocolsHealth` fields found", "HealthReport" ) - protocolsHealth = some(reader.readValue(seq[ProtocolHealth])) + protocolsHealth = Opt.some(reader.readValue(seq[ProtocolHealth])) else: unrecognizedFieldWarning(value) diff --git a/logos_delivery/waku/rest_api/endpoint/legacy_lightpush/handlers.nim b/logos_delivery/waku/rest_api/endpoint/legacy_lightpush/handlers.nim index 058b84b8e..a2748de45 100644 --- a/logos_delivery/waku/rest_api/endpoint/legacy_lightpush/handlers.nim +++ b/logos_delivery/waku/rest_api/endpoint/legacy_lightpush/handlers.nim @@ -1,12 +1,13 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} import std/strformat, + std/options, + results, stew/byteutils, chronicles, json_serialization, - json_serialization/std/options, + json_serialization/pkg/results, presto/route, presto/common @@ -43,7 +44,7 @@ const ROUTE_LIGHTPUSH = "/lightpush/v1/message" proc installLightPushRequestHandler*( router: var RestRouter, node: WakuNode, - discHandler: Option[DiscoveryHandler] = none(DiscoveryHandler), + discHandler: Opt[DiscoveryHandler] = Opt.none(DiscoveryHandler), ) = router.api(MethodPost, ROUTE_LIGHTPUSH) do( contentBody: Option[ContentBody] diff --git a/logos_delivery/waku/rest_api/endpoint/legacy_lightpush/types.nim b/logos_delivery/waku/rest_api/endpoint/legacy_lightpush/types.nim index 60368403f..63ccac701 100644 --- a/logos_delivery/waku/rest_api/endpoint/legacy_lightpush/types.nim +++ b/logos_delivery/waku/rest_api/endpoint/legacy_lightpush/types.nim @@ -1,10 +1,11 @@ {.push raises: [].} import + results, std/[sets, strformat], chronicles, json_serialization, - json_serialization/std/options, + json_serialization/pkg/results, presto/[route, client] import ../../../waku_core, ../relay/types as relay_types, ../serdes @@ -14,7 +15,7 @@ export relay_types #### Types type PushRequest* = object - pubsubTopic*: Option[PubSubTopic] + pubsubTopic*: Opt[PubSubTopic] message*: RelayWakuMessage #### Serialization and deserialization @@ -32,8 +33,8 @@ proc readValue*( reader: var JsonReader[RestJson], value: var PushRequest ) {.raises: [SerializationError, IOError].} = var - pubsubTopic = none(PubsubTopic) - message = none(RelayWakuMessage) + pubsubTopic = Opt.none(PubsubTopic) + message = Opt.none(RelayWakuMessage) var keys = initHashSet[string]() for fieldName in readObjectFields(reader): @@ -48,9 +49,9 @@ proc readValue*( case fieldName of "pubsubTopic": - pubsubTopic = some(reader.readValue(PubsubTopic)) + pubsubTopic = Opt.some(reader.readValue(PubsubTopic)) of "message": - message = some(reader.readValue(RelayWakuMessage)) + message = Opt.some(reader.readValue(RelayWakuMessage)) else: unrecognizedFieldWarning(value) @@ -60,8 +61,8 @@ proc readValue*( value = PushRequest( pubsubTopic: if pubsubTopic.isNone() or pubsubTopic.get() == "": - none(string) + Opt.none(string) else: - some(pubsubTopic.get()), + Opt.some(pubsubTopic.get()), message: message.get(), ) diff --git a/logos_delivery/waku/rest_api/endpoint/lightpush/client.nim b/logos_delivery/waku/rest_api/endpoint/lightpush/client.nim index abf832a3c..a80d437f5 100644 --- a/logos_delivery/waku/rest_api/endpoint/lightpush/client.nim +++ b/logos_delivery/waku/rest_api/endpoint/lightpush/client.nim @@ -7,7 +7,7 @@ import strformat, chronicles, json_serialization, - json_serialization/std/options, + json_serialization/pkg/results, presto/[route, client, common] import ../../../waku_core, ../serdes, ../responses, ../rest_serdes, ./types diff --git a/logos_delivery/waku/rest_api/endpoint/lightpush/handlers.nim b/logos_delivery/waku/rest_api/endpoint/lightpush/handlers.nim index 5980c028c..18e1eb10a 100644 --- a/logos_delivery/waku/rest_api/endpoint/lightpush/handlers.nim +++ b/logos_delivery/waku/rest_api/endpoint/lightpush/handlers.nim @@ -1,12 +1,13 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} import std/strformat, + std/options, + results, stew/byteutils, chronicles, json_serialization, - json_serialization/std/options, + json_serialization/pkg/results, presto/route, presto/common @@ -42,7 +43,7 @@ proc makeRestResponse(response: WakuLightPushResult): RestApiResponse = var apiResponse: PushResponse if response.isOk(): - apiResponse.relayPeerCount = some(response.get()) + apiResponse.relayPeerCount = Opt.some(response.get()) else: httpStatus = convertErrorKindToHttpStatus(response.error().code) apiResponse.statusDesc = response.error().desc @@ -61,7 +62,7 @@ const ROUTE_LIGHTPUSH = "/lightpush/v3/message" proc installLightPushRequestHandler*( router: var RestRouter, node: WakuNode, - discHandler: Option[DiscoveryHandler] = none(DiscoveryHandler), + discHandler: Opt[DiscoveryHandler] = Opt.none(DiscoveryHandler), ) = router.api(MethodPost, ROUTE_LIGHTPUSH) do( contentBody: Option[ContentBody] @@ -77,7 +78,7 @@ proc installLightPushRequestHandler*( let msg = req.message.toWakuMessage().valueOr: return makeRestResponse(lightpushResultBadRequest("Invalid message! " & $error)) - var toPeer = none(RemotePeerInfo) + var toPeer = Opt.none(RemotePeerInfo) if useSelfHostedLightPush(node): discard else: @@ -93,7 +94,7 @@ proc installLightPushRequestHandler*( peerOp.valueOr: return makeRestResponse(lightpushResultServiceUnavailable(NoPeerNoneFoundError)) - toPeer = some(aPeer) + toPeer = Opt.some(aPeer) let subFut = node.lightpushPublish(req.pubsubTopic, msg, toPeer) diff --git a/logos_delivery/waku/rest_api/endpoint/lightpush/types.nim b/logos_delivery/waku/rest_api/endpoint/lightpush/types.nim index 1fb87ab45..bd2e578f0 100644 --- a/logos_delivery/waku/rest_api/endpoint/lightpush/types.nim +++ b/logos_delivery/waku/rest_api/endpoint/lightpush/types.nim @@ -1,10 +1,11 @@ {.push raises: [].} import + results, std/[sets, strformat], chronicles, json_serialization, - json_serialization/std/options, + json_serialization/pkg/results, presto/[route, client] import ../../../waku_core, ../relay/types as relay_types, ../serdes @@ -15,12 +16,12 @@ export relay_types type PushRequest* = object - pubsubTopic*: Option[PubSubTopic] + pubsubTopic*: Opt[PubSubTopic] message*: RelayWakuMessage PushResponse* = object - statusDesc*: Option[string] - relayPeerCount*: Option[uint32] + statusDesc*: Opt[string] + relayPeerCount*: Opt[uint32] #### Serialization and deserialization proc writeValue*( @@ -36,8 +37,8 @@ proc readValue*( reader: var JsonReader[RestJson], value: var PushRequest ) {.raises: [SerializationError, IOError].} = var - pubsubTopic = none(PubsubTopic) - message = none(RelayWakuMessage) + pubsubTopic = Opt.none(PubsubTopic) + message = Opt.none(RelayWakuMessage) var keys = initHashSet[string]() for fieldName in readObjectFields(reader): @@ -52,9 +53,9 @@ proc readValue*( case fieldName of "pubsubTopic": - pubsubTopic = some(reader.readValue(PubsubTopic)) + pubsubTopic = Opt.some(reader.readValue(PubsubTopic)) of "message": - message = some(reader.readValue(RelayWakuMessage)) + message = Opt.some(reader.readValue(RelayWakuMessage)) else: unrecognizedFieldWarning(value) @@ -64,9 +65,9 @@ proc readValue*( value = PushRequest( pubsubTopic: if pubsubTopic.isNone() or pubsubTopic.get() == "": - none(string) + Opt.none(string) else: - some(pubsubTopic.get()), + Opt.some(pubsubTopic.get()), message: message.get(), ) @@ -84,8 +85,8 @@ proc readValue*( reader: var JsonReader[RestJson], value: var PushResponse ) {.raises: [SerializationError, IOError].} = var - statusDesc = none(string) - relayPeerCount = none(uint32) + statusDesc = Opt.none(string) + relayPeerCount = Opt.none(uint32) var keys = initHashSet[string]() for fieldName in readObjectFields(reader): @@ -100,9 +101,9 @@ proc readValue*( case fieldName of "statusDesc": - statusDesc = some(reader.readValue(string)) + statusDesc = Opt.some(reader.readValue(string)) of "relayPeerCount": - relayPeerCount = some(reader.readValue(uint32)) + relayPeerCount = Opt.some(reader.readValue(uint32)) else: unrecognizedFieldWarning(value) diff --git a/logos_delivery/waku/rest_api/endpoint/origin_handler.nim b/logos_delivery/waku/rest_api/endpoint/origin_handler.nim index 148dd3962..0a8fa9ec2 100644 --- a/logos_delivery/waku/rest_api/endpoint/origin_handler.nim +++ b/logos_delivery/waku/rest_api/endpoint/origin_handler.nim @@ -1,36 +1,30 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} -import - std/[options, strutils, net], - regex, - results, - chronicles, - chronos, - chronos/apps/http/httpserver +import std/[strutils, net], regex, results +import chronicles, chronos, chronos/apps/http/httpserver type OriginHandlerMiddlewareRef* = ref object of HttpServerMiddlewareRef - allowedOriginMatcher: Option[Regex2] + allowedOriginMatcher: Opt[Regex2] everyOriginAllowed: bool -proc isEveryOriginAllowed(maybeAllowedOrigin: Option[string]): bool = +proc isEveryOriginAllowed(maybeAllowedOrigin: Opt[string]): bool = return maybeAllowedOrigin.isSome() and maybeAllowedOrigin.get() == "*" -proc compileOriginMatcher(maybeAllowedOrigin: Option[string]): Option[Regex2] = +proc compileOriginMatcher(maybeAllowedOrigin: Opt[string]): Opt[Regex2] = if maybeAllowedOrigin.isNone(): - return none(Regex2) + return Opt.none(Regex2) let allowedOrigin = maybeAllowedOrigin.get() if (len(allowedOrigin) == 0): - return none(Regex2) + return Opt.none(Regex2) try: var matchOrigin: string if allowedOrigin == "*": matchOrigin = r".*" - return some(re2(matchOrigin, {regexCaseless, regexExtended})) + return Opt.some(re2(matchOrigin, {regexCaseless, regexExtended})) let allowedOrigins = allowedOrigin.split(",") @@ -56,11 +50,11 @@ proc compileOriginMatcher(maybeAllowedOrigin: Option[string]): Option[Regex2] = let finalExpression = matchExpressions.join("|") - return some(re2(finalExpression, {regexCaseless, regexExtended})) + return Opt.some(re2(finalExpression, {regexCaseless, regexExtended})) except RegexError: var msg = getCurrentExceptionMsg() error "Failed to compile regex", source = allowedOrigin, err = msg - return none(Regex2) + return Opt.none(Regex2) proc originsMatch( originHandler: OriginHandlerMiddlewareRef, requestOrigin: string @@ -115,7 +109,7 @@ proc originMiddlewareProc( proc new*( t: typedesc[OriginHandlerMiddlewareRef], - allowedOrigin: Option[string] = none(string), + allowedOrigin: Opt[string] = Opt.none(string), ): HttpServerMiddlewareRef = let middleware = OriginHandlerMiddlewareRef( allowedOriginMatcher: compileOriginMatcher(allowedOrigin), diff --git a/logos_delivery/waku/rest_api/endpoint/relay/handlers.nim b/logos_delivery/waku/rest_api/endpoint/relay/handlers.nim index 0976877f4..e88408215 100644 --- a/logos_delivery/waku/rest_api/endpoint/relay/handlers.nim +++ b/logos_delivery/waku/rest_api/endpoint/relay/handlers.nim @@ -1,13 +1,13 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} import std/sequtils, + std/options, stew/byteutils, results, chronicles, json_serialization, - json_serialization/std/options, + json_serialization/pkg/results, presto/route, presto/common import @@ -229,7 +229,9 @@ proc installRelayApiHandlers*( # if we reach here its either a non-RLN message or a RLN message with a valid proof info "Publishing message", pubSubTopic = pubSubTopic, rln = not node.rln.isNil() - if not (waitFor node.publish(some(pubSubTopic), message).withTimeout(futTimeout)): + if not ( + waitFor node.publish(Opt.some(pubSubTopic), message).withTimeout(futTimeout) + ): error "Failed to publish message to topic", pubSubTopic = pubSubTopic return RestApiResponse.internalServerError("Failed to publish: timedout") @@ -361,7 +363,7 @@ proc installRelayApiHandlers*( info "Publishing message", contentTopic = message.contentTopic, rln = not node.rln.isNil() - var publishFut = node.publish(some($pubsubTopic), message) + var publishFut = node.publish(Opt.some($pubsubTopic), message) if not await publishFut.withTimeout(futTimeout): return RestApiResponse.internalServerError("Failed to publish: timedout") diff --git a/logos_delivery/waku/rest_api/endpoint/relay/types.nim b/logos_delivery/waku/rest_api/endpoint/relay/types.nim index ca7d1ff05..c874847b8 100644 --- a/logos_delivery/waku/rest_api/endpoint/relay/types.nim +++ b/logos_delivery/waku/rest_api/endpoint/relay/types.nim @@ -1,10 +1,11 @@ {.push raises: [].} import + results, std/[sets, strformat, times], chronicles, json_serialization, - json_serialization/std/options, + json_serialization/pkg/results, presto/[route, client, common] import ../../../common/base64, ../../../waku_core, ../serdes @@ -12,12 +13,12 @@ import ../../../common/base64, ../../../waku_core, ../serdes type RelayWakuMessage* = object payload*: Base64String - contentTopic*: Option[ContentTopic] - version*: Option[Natural] - timestamp*: Option[int64] - meta*: Option[Base64String] - ephemeral*: Option[bool] - proof*: Option[Base64String] + contentTopic*: Opt[ContentTopic] + version*: Opt[Natural] + timestamp*: Opt[int64] + meta*: Opt[Base64String] + ephemeral*: Opt[bool] + proof*: Opt[Base64String] type RelayGetMessagesResponse* = seq[RelayWakuMessage] @@ -28,16 +29,16 @@ type proc toRelayWakuMessage*(msg: WakuMessage): RelayWakuMessage = RelayWakuMessage( payload: base64.encode(msg.payload), - contentTopic: some(msg.contentTopic), - version: some(Natural(msg.version)), - timestamp: some(msg.timestamp), + contentTopic: Opt.some(msg.contentTopic), + version: Opt.some(Natural(msg.version)), + timestamp: Opt.some(msg.timestamp), meta: if msg.meta.len > 0: - some(base64.encode(msg.meta)) + Opt.some(base64.encode(msg.meta)) else: - none(Base64String), - ephemeral: some(msg.ephemeral), - proof: some(base64.encode(msg.proof)), + Opt.none(Base64String), + ephemeral: Opt.some(msg.ephemeral), + proof: Opt.some(base64.encode(msg.proof)), ) proc toWakuMessage*(msg: RelayWakuMessage, version = 0): Result[WakuMessage, string] = @@ -91,13 +92,13 @@ proc readValue*( reader: var JsonReader[RestJson], value: var RelayWakuMessage ) {.raises: [SerializationError, IOError].} = var - payload = none(Base64String) - contentTopic = none(ContentTopic) - version = none(Natural) - timestamp = none(int64) - meta = none(Base64String) - ephemeral = none(bool) - proof = none(Base64String) + payload = Opt.none(Base64String) + contentTopic = Opt.none(ContentTopic) + version = Opt.none(Natural) + timestamp = Opt.none(int64) + meta = Opt.none(Base64String) + ephemeral = Opt.none(bool) + proof = Opt.none(Base64String) var keys = initHashSet[string]() for fieldName in readObjectFields(reader): @@ -112,19 +113,19 @@ proc readValue*( case fieldName of "payload": - payload = some(reader.readValue(Base64String)) + payload = Opt.some(reader.readValue(Base64String)) of "contentTopic": - contentTopic = some(reader.readValue(ContentTopic)) + contentTopic = Opt.some(reader.readValue(ContentTopic)) of "version": - version = some(reader.readValue(Natural)) + version = Opt.some(reader.readValue(Natural)) of "timestamp": - timestamp = some(reader.readValue(int64)) + timestamp = Opt.some(reader.readValue(int64)) of "meta": - meta = some(reader.readValue(Base64String)) + meta = Opt.some(reader.readValue(Base64String)) of "ephemeral": - ephemeral = some(reader.readValue(bool)) + ephemeral = Opt.some(reader.readValue(bool)) of "proof": - proof = some(reader.readValue(Base64String)) + proof = Opt.some(reader.readValue(Base64String)) else: unrecognizedFieldWarning(value) diff --git a/logos_delivery/waku/rest_api/endpoint/rest_serdes.nim b/logos_delivery/waku/rest_api/endpoint/rest_serdes.nim index 3441b6b26..45642a086 100644 --- a/logos_delivery/waku/rest_api/endpoint/rest_serdes.nim +++ b/logos_delivery/waku/rest_api/endpoint/rest_serdes.nim @@ -1,14 +1,14 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} import std/typetraits, std/os, + std/options, results, chronicles, serialization, json_serialization, - json_serialization/std/options, + json_serialization/pkg/results, json_serialization/std/net, json_serialization/std/sets, presto/common diff --git a/logos_delivery/waku/rest_api/endpoint/serdes.nim b/logos_delivery/waku/rest_api/endpoint/serdes.nim index ab7ed8d25..98f42f9fa 100644 --- a/logos_delivery/waku/rest_api/endpoint/serdes.nim +++ b/logos_delivery/waku/rest_api/endpoint/serdes.nim @@ -7,7 +7,7 @@ import chronicles, serialization, json_serialization, - json_serialization/std/options, + json_serialization/pkg/results, json_serialization/std/net, json_serialization/std/sets, presto/common diff --git a/logos_delivery/waku/rest_api/endpoint/server.nim b/logos_delivery/waku/rest_api/endpoint/server.nim index 44a02ccb2..b7e6b1012 100644 --- a/logos_delivery/waku/rest_api/endpoint/server.nim +++ b/logos_delivery/waku/rest_api/endpoint/server.nim @@ -73,7 +73,7 @@ proc new*( maxRequestBodySize: int = 1_048_576, requestErrorHandler: RestRequestErrorHandler = nil, dualstack = DualStackType.Auto, - allowedOrigin: Option[string] = none(string), + allowedOrigin: Opt[string] = Opt.none(string), ): RestServerResult[WakuRestServerRef] = var server = WakuRestServerRef(router: router) @@ -116,14 +116,13 @@ proc getRouter(): RestRouter = ## because it will be used for query routing. if pattern.startsWith("{") and pattern.endsWith("}"): 0 else: 1 - # disable allowed origin handling by presto, we add our own handling as middleware - RestRouter.init(validate, allowedOrigin = none(string)) + RestRouter.init(validate) proc init*( T: type WakuRestServerRef, ip: IpAddress, port: Port, - allowedOrigin = none(string), + allowedOrigin = Opt.none(string), conf = RestServerConf.default(), requestErrorHandler: RestRequestErrorHandler = nil, ): RestServerResult[T] = @@ -159,7 +158,7 @@ proc init*( proc newRestHttpServer*( ip: IpAddress, port: Port, - allowedOrigin = none(string), + allowedOrigin = Opt.none(string), conf = RestServerConf.default(), requestErrorHandler: RestRequestErrorHandler = nil, ): RestServerResult[WakuRestServerRef] = diff --git a/logos_delivery/waku/rest_api/endpoint/store/client.nim b/logos_delivery/waku/rest_api/endpoint/store/client.nim index 71ba7610d..d53883fc9 100644 --- a/logos_delivery/waku/rest_api/endpoint/store/client.nim +++ b/logos_delivery/waku/rest_api/endpoint/store/client.nim @@ -1,7 +1,11 @@ {.push raises: [].} import - chronicles, json_serialization, json_serialization/std/options, presto/[route, client] + results, + chronicles, + json_serialization, + json_serialization/pkg/results, + presto/[route, client] import ../../../waku_store/common, ../../../waku_core/message/digest, @@ -34,7 +38,7 @@ proc decodeBytes*( statusCode: uint32(ErrorCode.BAD_RESPONSE), statusDesc: res, messages: newSeq[WakuMessageKeyValueHex](0), - paginationCursor: none(string), + paginationCursor: Opt.none(string), ) ) diff --git a/logos_delivery/waku/rest_api/endpoint/store/handlers.nim b/logos_delivery/waku/rest_api/endpoint/store/handlers.nim index 072041f29..aa0136922 100644 --- a/logos_delivery/waku/rest_api/endpoint/store/handlers.nim +++ b/logos_delivery/waku/rest_api/endpoint/store/handlers.nim @@ -1,19 +1,21 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} +import std/options, std/[strformat, sugar], results + +import chronicles, uri, json_serialization, presto/route import - std/[strformat, sugar], results, chronicles, uri, json_serialization, presto/route -import - ../../../waku_core, - ../../../waku_store/common, - ../../../waku_store/self_req_handler, - ../../../waku_node, - ../../../node/peer_manager, - ../../../common/paging, - ../../handlers, - ../responses, - ../serdes, - ./types + logos_delivery/waku/[ + waku_core, + waku_store/common, + waku_store/self_req_handler, + waku_node, + node/peer_manager, + common/paging, + rest_api/handlers, + rest_api/endpoint/responses, + rest_api/endpoint/serdes, + rest_api/endpoint/store/types, + ] export types @@ -54,20 +56,20 @@ proc performStoreQuery( return resp -# Converts a string time representation into an Option[Timestamp]. +# Converts a string time representation into an Opt[Timestamp]. # Only positive time is considered a valid Timestamp in the request -proc parseTime(input: Option[string]): Result[Option[Timestamp], string] = +proc parseTime(input: Opt[string]): Result[Opt[Timestamp], string] = if input.isSome() and input.get() != "": try: let time = parseInt(input.get()) if time > 0: - return ok(some(Timestamp(time))) + return ok(Opt.some(Timestamp(time))) except ValueError: return err("time parsing error: " & getCurrentExceptionMsg()) - return ok(none(Timestamp)) + return ok(Opt.none(Timestamp)) -proc parseIncludeData(input: Option[string]): Result[bool, string] = +proc parseIncludeData(input: Opt[string]): Result[bool, string] = var includeData = false if input.isSome() and input.get() != "": try: @@ -79,24 +81,24 @@ proc parseIncludeData(input: Option[string]): Result[bool, string] = # Creates a HistoryQuery from the given params proc createStoreQuery( - includeData: Option[string], - pubsubTopic: Option[string], - contentTopics: Option[string], - startTime: Option[string], - endTime: Option[string], - hashes: Option[string], - cursor: Option[string], - direction: Option[string], - pageSize: Option[string], + includeData: Opt[string], + pubsubTopic: Opt[string], + contentTopics: Opt[string], + startTime: Opt[string], + endTime: Opt[string], + hashes: Opt[string], + cursor: Opt[string], + direction: Opt[string], + pageSize: Opt[string], ): Result[StoreQueryRequest, string] = var parsedIncludeData = ?parseIncludeData(includeData) # Parse pubsubTopic parameter - var parsedPubsubTopic = none(string) + var parsedPubsubTopic = Opt.none(string) if pubsubTopic.isSome(): let decodedPubsubTopic = decodeUrl(pubsubTopic.get()) if decodedPubsubTopic != "": - parsedPubsubTopic = some(decodedPubsubTopic) + parsedPubsubTopic = Opt.some(decodedPubsubTopic) # Parse the content topics var parsedContentTopics = newSeq[ContentTopic](0) @@ -123,20 +125,20 @@ proc createStoreQuery( parsedDirection = direction.get().into() # Parse page size field - var parsedPagedSize = none(uint64) + var parsedPagedSize = Opt.none(uint64) if pageSize.isSome() and pageSize.get() != "": try: - parsedPagedSize = some(uint64(parseInt(pageSize.get()))) + parsedPagedSize = Opt.some(uint64(parseInt(pageSize.get()))) except CatchableError: return err("page size parsing error: " & getCurrentExceptionMsg()) # Enforce default value of page_size to 20 if parsedPagedSize.isNone(): - parsedPagedSize = some(20.uint64) + parsedPagedSize = Opt.some(20.uint64) # Enforce max value of page_size to 100 if parsedPagedSize.get() > 100: - parsedPagedSize = some(100.uint64) + parsedPagedSize = Opt.some(100.uint64) return ok( StoreQueryRequest( @@ -152,13 +154,11 @@ proc createStoreQuery( ) ) -# Simple type conversion. The "Option[Result[string, cstring]]" -# type is used by the nim-presto library. -proc toOpt(self: Option[Result[string, cstring]]): Option[string] = +proc toOpt(self: Option[Result[string, cstring]]): Opt[string] = if not self.isSome() or self.get().value == "": - return none(string) + return Opt.none(string) if self.isSome() and self.get().value != "": - return some(self.get().value) + return Opt.some(self.get().value) proc retrieveMsgsFromSelfNode( self: WakuNode, storeQuery: StoreQueryRequest @@ -183,7 +183,7 @@ proc retrieveMsgsFromSelfNode( proc installStoreApiHandlers*( router: var RestRouter, node: WakuNode, - discHandler: Option[DiscoveryHandler] = none(DiscoveryHandler), + discHandler: Opt[DiscoveryHandler] = Opt.none(DiscoveryHandler), ) = # Handles the store-query request according to the passed parameters router.api(MethodGet, "/store/v3/messages") do( diff --git a/logos_delivery/waku/rest_api/endpoint/store/types.nim b/logos_delivery/waku/rest_api/endpoint/store/types.nim index c53797233..b4c9128c9 100644 --- a/logos_delivery/waku/rest_api/endpoint/store/types.nim +++ b/logos_delivery/waku/rest_api/endpoint/store/types.nim @@ -1,12 +1,12 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} import - std/[sets, strformat, uri, options, sequtils], + results, + std/[sets, strformat, uri, sequtils], stew/byteutils, chronicles, json_serialization, - json_serialization/std/options, + json_serialization/pkg/results, presto/[route, client, common] import ../../../waku_store/common, ../../../common/base64, ../../../waku_core, ../serdes @@ -18,15 +18,15 @@ Json.setWriter JsonWriter, PreferredOutput = string #### Type conversion -proc parseHash*(input: Option[string]): Result[Option[WakuMessageHash], string] = +proc parseHash*(input: Opt[string]): Result[Opt[WakuMessageHash], string] = let hexUrlEncoded = if input.isSome(): input.get() else: - return ok(none(WakuMessageHash)) + return ok(Opt.none(WakuMessageHash)) if hexUrlEncoded == "": - return ok(none(WakuMessageHash)) + return ok(Opt.none(WakuMessageHash)) let hexDecoded = decodeUrl(hexUrlEncoded, false) @@ -42,9 +42,9 @@ proc parseHash*(input: Option[string]): Result[Option[WakuMessageHash], string] let hash: WakuMessageHash = fromBytes(decodedBytes) - return ok(some(hash)) + return ok(Opt.some(hash)) -proc parseHashes*(input: Option[string]): Result[seq[WakuMessageHash], string] = +proc parseHashes*(input: Opt[string]): Result[seq[WakuMessageHash], string] = var hashes: seq[WakuMessageHash] = @[] if not input.isSome() or input.get() == "": @@ -54,7 +54,7 @@ proc parseHashes*(input: Option[string]): Result[seq[WakuMessageHash], string] = if decodedUrl != "": for subString in decodedUrl.split(','): - let hash = ?parseHash(some(subString)) + let hash = ?parseHash(Opt.some(subString)) if hash.isSome(): hashes.add(hash.get()) @@ -172,9 +172,9 @@ proc readValue*( reader: var JsonReader, value: var WakuMessageKeyValueHex ) {.gcsafe, raises: [SerializationError, IOError].} = var - messageHash = none(string) - message = none(WakuMessage) - pubsubTopic = none(PubsubTopic) + messageHash = Opt.none(string) + message = Opt.none(WakuMessage) + pubsubTopic = Opt.none(PubsubTopic) for fieldName in readObjectFields(reader): case fieldName @@ -183,19 +183,19 @@ proc readValue*( reader.raiseUnexpectedField( "Multiple `messageHash` fields found", "WakuMessageKeyValueHex" ) - messageHash = some(reader.readValue(string)) + messageHash = Opt.some(reader.readValue(string)) of "message": if message.isSome(): reader.raiseUnexpectedField( "Multiple `message` fields found", "WakuMessageKeyValueHex" ) - message = some(reader.readValue(WakuMessage)) + message = Opt.some(reader.readValue(WakuMessage)) of "pubsubTopic": if pubsubTopic.isSome(): reader.raiseUnexpectedField( "Multiple `pubsubTopic` fields found", "WakuMessageKeyValueHex" ) - pubsubTopic = some(reader.readValue(string)) + pubsubTopic = Opt.some(reader.readValue(string)) else: reader.raiseUnexpectedField("Unrecognided field", cstring(fieldName)) @@ -227,11 +227,11 @@ proc readValue*( reader: var JsonReader, value: var StoreQueryResponseHex ) {.gcsafe, raises: [SerializationError, IOError].} = var - requestId = none(string) - code = none(uint32) - desc = none(string) - messages = none(seq[WakuMessageKeyValueHex]) - cursor = none(string) + requestId = Opt.none(string) + code = Opt.none(uint32) + desc = Opt.none(string) + messages = Opt.none(seq[WakuMessageKeyValueHex]) + cursor = Opt.none(string) for fieldName in readObjectFields(reader): case fieldName @@ -240,31 +240,31 @@ proc readValue*( reader.raiseUnexpectedField( "Multiple `requestId` fields found", "StoreQueryResponseHex" ) - requestId = some(reader.readValue(string)) + requestId = Opt.some(reader.readValue(string)) of "statusCode": if code.isSome(): reader.raiseUnexpectedField( "Multiple `statusCode` fields found", "StoreQueryResponseHex" ) - code = some(reader.readValue(uint32)) + code = Opt.some(reader.readValue(uint32)) of "statusDesc": if desc.isSome(): reader.raiseUnexpectedField( "Multiple `statusDesc` fields found", "StoreQueryResponseHex" ) - desc = some(reader.readValue(string)) + desc = Opt.some(reader.readValue(string)) of "messages": if messages.isSome(): reader.raiseUnexpectedField( "Multiple `messages` fields found", "StoreQueryResponseHex" ) - messages = some(reader.readValue(seq[WakuMessageKeyValueHex])) + messages = Opt.some(reader.readValue(seq[WakuMessageKeyValueHex])) of "paginationCursor": if cursor.isSome(): reader.raiseUnexpectedField( "Multiple `paginationCursor` fields found", "StoreQueryResponseHex" ) - cursor = some(reader.readValue(string)) + cursor = Opt.some(reader.readValue(string)) else: reader.raiseUnexpectedField("Unrecognided field", cstring(fieldName)) diff --git a/logos_delivery/waku/rest_api/handlers.nim b/logos_delivery/waku/rest_api/handlers.nim index 520c0518a..affd67ca8 100644 --- a/logos_delivery/waku/rest_api/handlers.nim +++ b/logos_delivery/waku/rest_api/handlers.nim @@ -1,18 +1,17 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} -import chronos, std/[options, sequtils], results +import chronos, std/sequtils, results import ../discovery/waku_discv5, ../waku_relay, ../waku_core, ./message_cache ### Discovery type DiscoveryHandler* = - proc(): Future[Result[Option[RemotePeerInfo], string]] {.async, closure.} + proc(): Future[Result[Opt[RemotePeerInfo], string]] {.async, closure.} proc defaultDiscoveryHandler*( discv5: WakuDiscoveryV5, cap: Capabilities ): DiscoveryHandler = - proc(): Future[Result[Option[RemotePeerInfo], string]] {.async, closure.} = + proc(): Future[Result[Opt[RemotePeerInfo], string]] {.async, closure.} = #Discv5 is already filtering peers by shards no need to pass a predicate. let findPeers = discv5.findRandomPeers() @@ -24,12 +23,12 @@ proc defaultDiscoveryHandler*( peers.keepItIf(it.supportsCapability(cap)) if peers.len == 0: - return ok(none(RemotePeerInfo)) + return ok(Opt.none(RemotePeerInfo)) let remotePeerInfo = peers[0].toRemotePeerInfo().valueOr: return err($error) - return ok(some(remotePeerInfo)) + return ok(Opt.some(remotePeerInfo)) ### Message Cache diff --git a/logos_delivery/waku/rest_api/message_cache.nim b/logos_delivery/waku/rest_api/message_cache.nim index acef5a729..8a6ce6d54 100644 --- a/logos_delivery/waku/rest_api/message_cache.nim +++ b/logos_delivery/waku/rest_api/message_cache.nim @@ -1,7 +1,7 @@ {.push raises: [].} import - std/[sequtils, sugar, algorithm, options], + std/[sequtils, sugar, algorithm], results, chronicles, chronos, @@ -41,23 +41,23 @@ proc pubsubTopicCount*(self: MessageCache): int = proc contentTopicCount*(self: MessageCache): int = self.contentTopics.len -proc pubsubSearch(self: MessageCache, pubsubTopic: PubsubTopic): Option[int] = +proc pubsubSearch(self: MessageCache, pubsubTopic: PubsubTopic): Opt[int] = # Return some with the index if found none otherwise. for i, topic in self.pubsubTopics: if topic == pubsubTopic: - return some(i) + return Opt.some(i) - return none(int) + return Opt.none(int) -proc contentSearch(self: MessageCache, contentTopic: ContentTopic): Option[int] = +proc contentSearch(self: MessageCache, contentTopic: ContentTopic): Opt[int] = # Return some with the index if found none otherwise. for i, topic in self.contentTopics: if topic == contentTopic: - return some(i) + return Opt.some(i) - return none(int) + return Opt.none(int) proc isPubsubSubscribed*(self: MessageCache, pubsubTopic: PubsubTopic): bool = self.pubsubSearch(pubsubTopic).isSome() diff --git a/logos_delivery/waku/rln/config.nim b/logos_delivery/waku/rln/config.nim index 4d449f392..d2f4e6e29 100644 --- a/logos_delivery/waku/rln/config.nim +++ b/logos_delivery/waku/rln/config.nim @@ -1,6 +1,6 @@ {.push raises: [].} -import std/options, stint +import results, stint import logos_delivery/waku/common/error_handling @@ -13,14 +13,14 @@ type RlnConf* = object of RootObj # change the config to either nest or use enum/type variant so it's obvious # and then it can be set to `requiresInit` dynamic*: bool - credIndex*: Option[uint] + credIndex*: Opt[uint] ethContractAddress*: string ethClientUrls*: seq[string] chainId*: UInt256 - creds*: Option[RlnCreds] + creds*: Opt[RlnCreds] epochSizeSec*: uint64 userMessageLimit*: uint64 - ethPrivateKey*: Option[string] + ethPrivateKey*: Opt[string] type WakuRlnConfig* = object of RlnConf onFatalErrorAction*: OnFatalErrorHandler diff --git a/logos_delivery/waku/rln/group_manager/group_manager_base.nim b/logos_delivery/waku/rln/group_manager/group_manager_base.nim index 5f91cf19f..deaa6533e 100644 --- a/logos_delivery/waku/rln/group_manager/group_manager_base.nim +++ b/logos_delivery/waku/rln/group_manager/group_manager_base.nim @@ -1,8 +1,8 @@ import ../../common/error_handling, ../protocol_types, ../protocol_metrics, ../constants -import options, chronos, results, std/[deques] +import chronos, results, std/[deques] -export options, chronos, results, protocol_types, protocol_metrics, deques +export chronos, results, protocol_types, protocol_metrics, deques # This module contains the GroupManager interface # The GroupManager is responsible for managing the group state @@ -19,16 +19,16 @@ type OnWithdrawCallback* = proc(withdrawals: seq[Membership]): Future[void] {.gc type GroupManagerResult*[T] = Result[T, string] type GroupManager* = ref object of RootObj - idCredentials*: Option[IdentityCredential] - membershipIndex*: Option[MembershipIndex] - registerCb*: Option[OnRegisterCallback] - withdrawCb*: Option[OnWithdrawCallback] + idCredentials*: Opt[IdentityCredential] + membershipIndex*: Opt[MembershipIndex] + registerCb*: Opt[OnRegisterCallback] + withdrawCb*: Opt[OnWithdrawCallback] rlnInstance*: ptr RlnRaw initialized*: bool latestIndex*: MembershipIndex validRoots*: Deque[MerkleNode] onFatalErrorAction*: OnFatalErrorHandler - userMessageLimit*: Option[UserMessageLimit] + userMessageLimit*: Opt[UserMessageLimit] rlnRelayMaxMessageLimit*: uint64 # This proc is used to initialize the group manager @@ -76,7 +76,7 @@ method registerBatch*( # This proc is used to set a callback that will be called when a new identity commitment is registered # The callback may be called multiple times, and should be used to for any post processing method onRegister*(g: GroupManager, cb: OnRegisterCallback) {.base, gcsafe.} = - g.registerCb = some(cb) + g.registerCb = Opt.some(cb) # This proc is used to withdraw/remove an identity commitment from the merkle tree # The user should have the identity secret hash to this commitment, by either deriving it, or owning it @@ -113,7 +113,7 @@ method stop*(g: GroupManager): Future[void] {.base, async.} = # This proc is used to set a callback that will be called when an identity commitment is withdrawn # The callback may be called multiple times, and should be used to for any post processing method onWithdraw*(g: GroupManager, cb: OnWithdrawCallback) {.base, gcsafe.} = - g.withdrawCb = some(cb) + g.withdrawCb = Opt.some(cb) method indexOfRoot*( g: GroupManager, root: MerkleNode diff --git a/logos_delivery/waku/rln/group_manager/on_chain/group_manager.nim b/logos_delivery/waku/rln/group_manager/on_chain/group_manager.nim index a912306a5..4b591edfa 100644 --- a/logos_delivery/waku/rln/group_manager/on_chain/group_manager.nim +++ b/logos_delivery/waku/rln/group_manager/on_chain/group_manager.nim @@ -1,7 +1,7 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} import + results, os, web3, web3/eth_api_types, @@ -33,15 +33,15 @@ type WakuRlnContractWithSender = Sender[WakuRlnContract] OnchainGroupManager* = ref object of GroupManager ethClientUrls*: seq[string] - ethPrivateKey*: Option[string] + ethPrivateKey*: Opt[string] ethContractAddress*: string - ethRpc*: Option[Web3] - wakuRlnContract*: Option[WakuRlnContractWithSender] - registrationTxHash*: Option[TxHash] + ethRpc*: Opt[Web3] + wakuRlnContract*: Opt[WakuRlnContractWithSender] + registrationTxHash*: Opt[TxHash] chainId*: UInt256 - keystorePath*: Option[string] - keystorePassword*: Option[string] - registrationHandler*: Option[RegistrationHandler] + keystorePath*: Opt[string] + keystorePassword*: Opt[string] + registrationHandler*: Opt[RegistrationHandler] latestProcessedBlock*: BlockNumber merkleProofCache*: seq[byte] merkleProofCacheGeneration: uint64 @@ -406,7 +406,7 @@ method register*( ) ).valueOr: return err("Failed to get transaction receipt: " & error) - g.registrationTxHash = some(txHash) + g.registrationTxHash = Opt.some(txHash) # the receipt topic holds the hash of signature of the raised events trace "registration receipt", receipt = tsReceipt[] @@ -420,10 +420,10 @@ method register*( "MembershipRegistered(uint256,uint256,uint32)" ).data) - var membershipRegisteredLog: Option[LogObject] + var membershipRegisteredLog: Opt[LogObject] for log in tsReceipt.logs: if log.topics.len > 0 and log.topics[0] == expectedEventSignature: - membershipRegisteredLog = some(log) + membershipRegisteredLog = Opt.some(log) break if membershipRegisteredLog.isNone(): @@ -438,9 +438,9 @@ method register*( ## Extract membership index from transaction log data (big endian) membershipIndex = UInt256.fromBytesBE(arguments[64 .. 95]) - g.userMessageLimit = some(userMessageLimit) - g.membershipIndex = some(membershipIndex.toMembershipIndex()) - g.idCredentials = some(identityCredential) + g.userMessageLimit = Opt.some(userMessageLimit) + g.membershipIndex = Opt.some(membershipIndex.toMembershipIndex()) + g.idCredentials = Opt.some(identityCredential) let rateCommitment = RateCommitment( idCommitment: identityCredential.idCommitment, userMessageLimit: userMessageLimit @@ -573,10 +573,10 @@ method verifyProof*( return ok(validProof) method onRegister*(g: OnchainGroupManager, cb: OnRegisterCallback) {.gcsafe.} = - g.registerCb = some(cb) + g.registerCb = Opt.some(cb) method onWithdraw*(g: OnchainGroupManager, cb: OnWithdrawCallback) {.gcsafe.} = - g.withdrawCb = some(cb) + g.withdrawCb = Opt.some(cb) proc establishConnection( g: OnchainGroupManager @@ -648,8 +648,8 @@ method init*(g: OnchainGroupManager): Future[GroupManagerResult[void]] {.async.} let contractAddress = web3.fromHex(web3.Address, g.ethContractAddress) let wakuRlnContract = ethRpc.contractSender(WakuRlnContract, contractAddress) - g.ethRpc = some(ethRpc) - g.wakuRlnContract = some(wakuRlnContract) + g.ethRpc = Opt.some(ethRpc) + g.wakuRlnContract = Opt.some(wakuRlnContract) if g.keystorePath.isSome() and g.keystorePassword.isSome(): if not fileExists(g.keystorePath.get()): @@ -671,14 +671,14 @@ method init*(g: OnchainGroupManager): Future[GroupManagerResult[void]] {.async.} ).valueOr: return err("failed to get the keystore credentials: " & $error) - g.membershipIndex = some(keystoreCred.treeIndex) - g.userMessageLimit = some(keystoreCred.userMessageLimit) + g.membershipIndex = Opt.some(keystoreCred.treeIndex) + g.userMessageLimit = Opt.some(keystoreCred.userMessageLimit) let idCommitment = keystoreCred.identityCredential.idCommitment let membershipExists = (await g.fetchMembershipStatus(idCommitment)).valueOr: return err("the commitment does not have a membership: " & error) - g.idCredentials = some(keystoreCred.identityCredential) + g.idCredentials = Opt.some(keystoreCred.identityCredential) let maxMembershipRateLimitRes = await g.fetchMaxMembershipRateLimit() let maxMembershipRateLimit = maxMembershipRateLimitRes.valueOr: @@ -696,7 +696,7 @@ method init*(g: OnchainGroupManager): Future[GroupManagerResult[void]] {.async.} return newEthRpc.ondisconnect = ethRpc.ondisconnect - g.ethRpc = some(newEthRpc) + g.ethRpc = Opt.some(newEthRpc) ethRpc.ondisconnect = proc() = asyncSpawn onDisconnect() diff --git a/logos_delivery/waku/rln/group_manager/on_chain/rpc_wrapper.nim b/logos_delivery/waku/rln/group_manager/on_chain/rpc_wrapper.nim index c5fbc4a01..7b8e1d091 100644 --- a/logos_delivery/waku/rln/group_manager/on_chain/rpc_wrapper.nim +++ b/logos_delivery/waku/rln/group_manager/on_chain/rpc_wrapper.nim @@ -1,4 +1,5 @@ import + results, web3, web3/eth_api_types, web3/primitives, diff --git a/logos_delivery/waku/rln/proof.nim b/logos_delivery/waku/rln/proof.nim index 8a29eb67b..ba4b0361a 100644 --- a/logos_delivery/waku/rln/proof.nim +++ b/logos_delivery/waku/rln/proof.nim @@ -1,11 +1,17 @@ {.push raises: [].} -import std/[options, times, sequtils] +import std/[times, sequtils] import chronos, chronicles, results, stew/byteutils -import ./types, ./protocol_types, ./conversion_utils, ./group_manager, ./nonce_manager - -import logos_delivery/waku/waku_core +import + logos_delivery/waku/[ + rln/types, + rln/protocol_types, + rln/conversion_utils, + rln/group_manager, + rln/nonce_manager, + waku_core, + ] proc calcEpoch*(rln: Rln, t: float64): Epoch = ## gets time `t` as `flaot64` with subseconds resolution in the fractional part @@ -56,13 +62,16 @@ proc toRLNSignal*(wakumessage: WakuMessage): seq[byte] = proc generateRLNProof*( rln: Rln, input: seq[byte], senderEpochTime: float64 -): Future[Result[seq[byte], string]] {.async.} = +): Future[Result[seq[byte], string]] {.async: (raises: []).} = let epoch = rln.calcEpoch(senderEpochTime) let nonce = rln.nonceManager.getNonce().valueOr: return err("could not get new message id to generate an rln proof: " & $error) - let proof = (await rln.groupManager.generateProof(input, epoch, nonce)).valueOr: - return err("could not generate rln-v2 proof: " & $error) - return ok(proof.encode().buffer) + try: + let proof = (await rln.groupManager.generateProof(input, epoch, nonce)).valueOr: + return err("could not generate rln-v2 proof: " & $error) + return ok(proof.encode().buffer) + except CatchableError as e: + return err("exception generating rln proof: " & e.msg) proc generateRLNProofWithRootRefresh*( rln: Rln, input: seq[byte], senderEpochTime: float64 @@ -97,7 +106,7 @@ proc attachRLNProof*( return ok(msgWithProof) proc checkAndGenerateRLNProof*( - rln: Option[Rln], message: WakuMessage + rln: Opt[Rln], message: WakuMessage ): Future[Result[WakuMessage, string]] {.async.} = ## Returns the message with an attached RLN proof, or unchanged when it ## already carries a proof or RLN is not configured. diff --git a/logos_delivery/waku/rln/protocol_types.nim b/logos_delivery/waku/rln/protocol_types.nim index 66aa72f53..4a34d57ed 100644 --- a/logos_delivery/waku/rln/protocol_types.nim +++ b/logos_delivery/waku/rln/protocol_types.nim @@ -1,6 +1,6 @@ {.push raises: [].} -import std/[options, tables, deques], stew/arrayops, stint, chronos, web3, eth/keys +import std/[tables, deques], stew/arrayops, stint, chronos, web3, eth/keys import ../waku_core, ../waku_keystore, ../common/protobuf export waku_keystore, waku_core diff --git a/logos_delivery/waku/rln/rln.nim b/logos_delivery/waku/rln/rln.nim index fa952822b..633d433dd 100644 --- a/logos_delivery/waku/rln/rln.nim +++ b/logos_delivery/waku/rln/rln.nim @@ -1,10 +1,8 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} import std/[sequtils, tables, times, deques], chronicles, - options, chronos, stint, web3, @@ -182,7 +180,7 @@ proc monitorEpochs(rln: Rln) {.async.} = await sleepAsync(sleepDuration) proc mount( - conf: WakuRlnConfig, registrationHandler = none(RegistrationHandler) + conf: WakuRlnConfig, registrationHandler = Opt.none(RegistrationHandler) ): Future[Result[Rln, string]] {.async.} = var groupManager: GroupManager @@ -193,12 +191,12 @@ proc mount( let (rlnRelayCredPath, rlnRelayCredPassword) = if conf.creds.isSome: - (some(conf.creds.get().path), some(conf.creds.get().password)) + (Opt.some(conf.creds.get().path), Opt.some(conf.creds.get().password)) else: - (none(string), none(string)) + (Opt.none(string), Opt.none(string)) groupManager = OnchainGroupManager( - userMessageLimit: some(conf.userMessageLimit), + userMessageLimit: Opt.some(conf.userMessageLimit), ethClientUrls: conf.ethClientUrls, ethContractAddress: $conf.ethContractAddress, chainId: conf.chainId, @@ -258,7 +256,9 @@ proc isReady*(rlnPeer: Rln): Future[bool] {.async.} = return false proc new*( - T: type Rln, conf: WakuRlnConfig, registrationHandler = none(RegistrationHandler) + T: type Rln, + conf: WakuRlnConfig, + registrationHandler = Opt.none(RegistrationHandler), ): Future[Result[Rln, string]] {.async.} = ## Mounts the rln-relay protocol on the node. ## The rln-relay protocol can be mounted in two modes: on-chain and off-chain. diff --git a/logos_delivery/waku/rln/rln/rln_interface.nim b/logos_delivery/waku/rln/rln/rln_interface.nim index d9b2fc903..23ac6c654 100644 --- a/logos_delivery/waku/rln/rln/rln_interface.nim +++ b/logos_delivery/waku/rln/rln/rln_interface.nim @@ -1,4 +1,3 @@ -import logos_delivery/waku/compat/option_valueor ## Nim wrappers for librln (zerokit v2.0.2, safer-ffi typed handles). ## ## Built against the `stateless` zerokit feature: tree-mutation FFI is not @@ -17,8 +16,7 @@ import logos_delivery/waku/compat/option_valueor ## x<32> | y<32> | nullifier<32> ] ## Total RLNProof byte size: 1 + 128 + 1 + 5*32 = 290 bytes. -import results -import ../protocol_types +import results, ../protocol_types {.push raises: [], gcsafe.} diff --git a/logos_delivery/waku/rln/rln/wrappers.nim b/logos_delivery/waku/rln/rln/wrappers.nim index 4f46fc164..d2d115484 100644 --- a/logos_delivery/waku/rln/rln/wrappers.nim +++ b/logos_delivery/waku/rln/rln/wrappers.nim @@ -1,8 +1,15 @@ -import logos_delivery/waku/compat/option_valueor -import chronicles, eth/keys, stew/[arrayops, endians2], stint, results +import stew/[arrayops, endians2], stint, results -import ./rln_interface, ../conversion_utils, ../protocol_types, ../protocol_metrics -import ../../waku_core, ../../waku_keystore +import chronicles, eth/keys + +import + logos_delivery/waku/[ + rln/rln/rln_interface, + rln/conversion_utils, + rln/protocol_types, + rln/protocol_metrics, + ] +import logos_delivery/waku/[waku_core, waku_keystore] {.push raises: [], gcsafe.} diff --git a/logos_delivery/waku/waku.nim b/logos_delivery/waku/waku.nim index 29290483f..29b42a7ef 100644 --- a/logos_delivery/waku/waku.nim +++ b/logos_delivery/waku/waku.nim @@ -1,8 +1,7 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} import - std/[options, sequtils, strformat], + std/[sequtils, strformat], results, chronicles, chronos, diff --git a/logos_delivery/waku/waku_archive/archive.nim b/logos_delivery/waku/waku_archive/archive.nim index ea5e2bf02..165d87277 100644 --- a/logos_delivery/waku/waku_archive/archive.nim +++ b/logos_delivery/waku/waku_archive/archive.nim @@ -1,8 +1,7 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} import - std/[times, options, sequtils, algorithm], + std/[times, sequtils, algorithm], stew/[byteutils], chronicles, chronos, @@ -233,7 +232,7 @@ proc findMessages*( var hashes = newSeq[WakuMessageHash]() var messages = newSeq[WakuMessage]() var topics = newSeq[PubsubTopic]() - var cursor = none(ArchiveCursor) + var cursor = Opt.none(ArchiveCursor) if rows.len == 0: return ok(ArchiveResponse(hashes: hashes, messages: messages, cursor: cursor)) @@ -253,7 +252,7 @@ proc findMessages*( let (hash, _, _) = rows[^2] - cursor = some(hash) + cursor = Opt.some(hash) # Messages MUST be returned in chronological order if not isAscendingOrder: diff --git a/logos_delivery/waku/waku_archive/common.nim b/logos_delivery/waku/waku_archive/common.nim index f26c73da9..4ef5e370b 100644 --- a/logos_delivery/waku/waku_archive/common.nim +++ b/logos_delivery/waku/waku_archive/common.nim @@ -1,7 +1,6 @@ {.push raises: [].} -import std/options, results -import ../waku_core, ../common/paging +import results, ../waku_core, ../common/paging ## Public API types @@ -10,11 +9,11 @@ type ArchiveQuery* = object includeData*: bool - pubsubTopic*: Option[PubsubTopic] + pubsubTopic*: Opt[PubsubTopic] contentTopics*: seq[ContentTopic] - cursor*: Option[ArchiveCursor] - startTime*: Option[Timestamp] - endTime*: Option[Timestamp] + cursor*: Opt[ArchiveCursor] + startTime*: Opt[Timestamp] + endTime*: Opt[Timestamp] hashes*: seq[WakuMessageHash] pageSize*: uint direction*: PagingDirection @@ -24,7 +23,7 @@ type hashes*: seq[WakuMessageHash] messages*: seq[WakuMessage] topics*: seq[PubsubTopic] - cursor*: Option[ArchiveCursor] + cursor*: Opt[ArchiveCursor] ArchiveErrorKind* {.pure.} = enum UNKNOWN = uint32(0) diff --git a/logos_delivery/waku/waku_archive/driver.nim b/logos_delivery/waku/waku_archive/driver.nim index 4d5cedd66..bb9dd532f 100644 --- a/logos_delivery/waku/waku_archive/driver.nim +++ b/logos_delivery/waku/waku_archive/driver.nim @@ -1,6 +1,6 @@ {.push raises: [].} -import std/options, results, chronos +import results, chronos import ../waku_core, ./common const DefaultPageSize*: uint = 25 @@ -30,10 +30,10 @@ method getMessages*( driver: ArchiveDriver, includeData = true, contentTopics = newSeq[ContentTopic](0), - pubsubTopic = none(PubsubTopic), - cursor = none(ArchiveCursor), - startTime = none(Timestamp), - endTime = none(Timestamp), + pubsubTopic = Opt.none(PubsubTopic), + cursor = Opt.none(ArchiveCursor), + startTime = Opt.none(Timestamp), + endTime = Opt.none(Timestamp), hashes = newSeq[WakuMessageHash](0), maxPageSize = DefaultPageSize, ascendingOrder = true, diff --git a/logos_delivery/waku/waku_archive/driver/builder.nim b/logos_delivery/waku/waku_archive/driver/builder.nim index 632468a00..811b16999 100644 --- a/logos_delivery/waku/waku_archive/driver/builder.nim +++ b/logos_delivery/waku/waku_archive/driver/builder.nim @@ -1,4 +1,3 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} import results, chronicles, chronos diff --git a/logos_delivery/waku/waku_archive/driver/postgres_driver/migrations.nim b/logos_delivery/waku/waku_archive/driver/postgres_driver/migrations.nim index f216e75b8..a1a3e93fe 100644 --- a/logos_delivery/waku/waku_archive/driver/postgres_driver/migrations.nim +++ b/logos_delivery/waku/waku_archive/driver/postgres_driver/migrations.nim @@ -1,4 +1,3 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} import std/strutils, results, chronicles, chronos diff --git a/logos_delivery/waku/waku_archive/driver/postgres_driver/postgres_driver.nim b/logos_delivery/waku/waku_archive/driver/postgres_driver/postgres_driver.nim index e909f953f..43a36821a 100644 --- a/logos_delivery/waku/waku_archive/driver/postgres_driver/postgres_driver.nim +++ b/logos_delivery/waku/waku_archive/driver/postgres_driver/postgres_driver.nim @@ -1,8 +1,7 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} import - std/[options, sequtils, strutils, strformat, times, sugar], + std/[sequtils, strutils, strformat, times, sugar], stew/[byteutils, arrayops], results, chronos, @@ -169,7 +168,7 @@ proc reset*(s: PostgresDriver): Future[ArchiveDriverResult[void]] {.async.} = let ret = await s.decreaseDatabaseSize(targetSize, forceRemoval) return ret -proc timeCursorCallbackImpl(pqResult: ptr PGresult, timeCursor: var Option[Timestamp]) = +proc timeCursorCallbackImpl(pqResult: ptr PGresult, timeCursor: var Opt[Timestamp]) = ## Callback to get a timestamp out of the DB. ## Used to get the cursor timestamp. @@ -192,7 +191,7 @@ proc timeCursorCallbackImpl(pqResult: ptr PGresult, timeCursor: var Option[Times error "could not parse correctly", error = error.msg return - timeCursor = some(time) + timeCursor = Opt.some(time) proc hashCallbackImpl( pqResult: ptr PGresult, rows: var seq[(WakuMessageHash, PubsubTopic, WakuMessage)] @@ -445,8 +444,8 @@ proc dropOrphanPartitions( proc getTimeCursor( s: PostgresDriver, hashHex: string -): Future[ArchiveDriverResult[Option[Timestamp]]] {.async.} = - var timeCursor: Option[Timestamp] +): Future[ArchiveDriverResult[Opt[Timestamp]]] {.async.} = + var timeCursor: Opt[Timestamp] proc cursorCallback(pqResult: ptr PGresult) = timeCursorCallbackImpl(pqResult, timeCursor) @@ -465,10 +464,10 @@ proc getTimeCursor( proc getMessagesArbitraryQuery( s: PostgresDriver, contentTopics: seq[ContentTopic] = @[], - pubsubTopic = none(PubsubTopic), - cursor = none(ArchiveCursor), - startTime = none(Timestamp), - endTime = none(Timestamp), + pubsubTopic = Opt.none(PubsubTopic), + cursor = Opt.none(ArchiveCursor), + startTime = Opt.none(Timestamp), + endTime = Opt.none(Timestamp), hexHashes: seq[string] = @[], maxPageSize = DefaultPageSize, ascendingOrder = true, @@ -544,10 +543,10 @@ proc getMessagesArbitraryQuery( proc getMessageHashesArbitraryQuery( s: PostgresDriver, contentTopics: seq[ContentTopic] = @[], - pubsubTopic = none(PubsubTopic), - cursor = none(ArchiveCursor), - startTime = none(Timestamp), - endTime = none(Timestamp), + pubsubTopic = Opt.none(PubsubTopic), + cursor = Opt.none(ArchiveCursor), + startTime = Opt.none(Timestamp), + endTime = Opt.none(Timestamp), hexHashes: seq[string] = @[], maxPageSize = DefaultPageSize, ascendingOrder = true, @@ -626,7 +625,7 @@ proc getMessagesPreparedStmt( s: PostgresDriver, contentTopic: string, pubsubTopic: PubsubTopic, - cursor = none(ArchiveCursor), + cursor = Opt.none(ArchiveCursor), startTime: Timestamp, endTime: Timestamp, hashes: string, @@ -717,7 +716,7 @@ proc getMessageHashesPreparedStmt( s: PostgresDriver, contentTopic: string, pubsubTopic: PubsubTopic, - cursor = none(ArchiveCursor), + cursor = Opt.none(ArchiveCursor), startTime: Timestamp, endTime: Timestamp, hashes: string, @@ -859,10 +858,10 @@ proc getMessagesWithinLimits( self: PostgresDriver, includeData: bool, contentTopics: seq[ContentTopic], - pubsubTopic: Option[PubsubTopic], - cursor: Option[ArchiveCursor], - startTime: Option[Timestamp], - endTime: Option[Timestamp], + pubsubTopic: Opt[PubsubTopic], + cursor: Opt[ArchiveCursor], + startTime: Opt[Timestamp], + endTime: Opt[Timestamp], hashes: seq[WakuMessageHash], maxPageSize: uint, ascendingOrder: bool, @@ -923,10 +922,10 @@ method getMessages*( s: PostgresDriver, includeData = true, contentTopics = newSeq[ContentTopic](0), - pubsubTopic = none(PubsubTopic), - cursor = none(ArchiveCursor), - startTime = none(Timestamp), - endTime = none(Timestamp), + pubsubTopic = Opt.none(PubsubTopic), + cursor = Opt.none(ArchiveCursor), + startTime = Opt.none(Timestamp), + endTime = Opt.none(Timestamp), hashes = newSeq[WakuMessageHash](0), maxPageSize = DefaultPageSize, ascendingOrder = true, diff --git a/logos_delivery/waku/waku_archive/driver/queue_driver/queue_driver.nim b/logos_delivery/waku/waku_archive/driver/queue_driver/queue_driver.nim index a810d231a..96a72d7f9 100644 --- a/logos_delivery/waku/waku_archive/driver/queue_driver/queue_driver.nim +++ b/logos_delivery/waku/waku_archive/driver/queue_driver/queue_driver.nim @@ -1,7 +1,6 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} -import std/options, results, stew/sorted_set, chronicles, chronos +import results, stew/sorted_set, chronicles, chronos import ../../../waku_core, ../../common, ../../driver, ./index logScope: @@ -81,7 +80,7 @@ proc getPage( driver: QueueDriver, pageSize: uint = 0, forward: bool = true, - cursor: Option[Index] = none(Index), + cursor: Opt[Index] = Opt.none(Index), predicate: QueryFilterMatcher = nil, ): QueueDriverGetPageResult {.raises: [].} = ## Populate a single page in forward direction @@ -249,19 +248,19 @@ method getMessages*( driver: QueueDriver, includeData = true, contentTopics: seq[ContentTopic] = @[], - pubsubTopic = none(PubsubTopic), - cursor = none(ArchiveCursor), - startTime = none(Timestamp), - endTime = none(Timestamp), + pubsubTopic = Opt.none(PubsubTopic), + cursor = Opt.none(ArchiveCursor), + startTime = Opt.none(Timestamp), + endTime = Opt.none(Timestamp), hashes: seq[WakuMessageHash] = @[], maxPageSize = DefaultPageSize, ascendingOrder = true, requestId = "", ): Future[ArchiveDriverResult[seq[ArchiveRow]]] {.async.} = - var index = none(Index) + var index = Opt.none(Index) if cursor.isSome(): - index = some(Index(hash: cursor.get())) + index = Opt.some(Index(hash: cursor.get())) let matchesQuery: QueryFilterMatcher = func (index: Index, msg: WakuMessage): bool = diff --git a/logos_delivery/waku/waku_archive/driver/sqlite_driver/queries.nim b/logos_delivery/waku/waku_archive/driver/sqlite_driver/queries.nim index 9ef6591c2..c7e0037cc 100644 --- a/logos_delivery/waku/waku_archive/driver/sqlite_driver/queries.nim +++ b/logos_delivery/waku/waku_archive/driver/sqlite_driver/queries.nim @@ -1,6 +1,6 @@ {.push raises: [].} -import std/[options, sequtils], stew/byteutils, sqlite3_abi, results +import std/sequtils, stew/byteutils, sqlite3_abi, results import chronicles import ../../../common/databases/db_sqlite, @@ -253,15 +253,15 @@ proc selectAllMessageHashes*(db: SqliteDatabase): DatabaseResult[seq[WakuMessage ## Select messages by history query with limit -proc combineClauses(clauses: varargs[Option[string]]): Option[string] = +proc combineClauses(clauses: varargs[Opt[string]]): Opt[string] = let whereSeq = @clauses.filterIt(it.isSome()).mapIt(it.get()) if whereSeq.len <= 0: - return none(string) + return Opt.none(string) var where: string = whereSeq[0] for clause in whereSeq[1 ..^ 1]: where &= " AND " & clause - return some(where) + return Opt.some(where) proc prepareStmt( db: SqliteDatabase, stmt: string @@ -299,11 +299,11 @@ proc selectTimestampByHashQuery(table: string): SqlQueryStr = proc getCursorTimestamp( db: SqliteDatabase, hash: WakuMessageHash -): DatabaseResult[Option[Timestamp]] = - var timestamp = none(Timestamp) +): DatabaseResult[Opt[Timestamp]] = + var timestamp = Opt.none(Timestamp) proc queryRowCallback(s: ptr sqlite3_stmt) = - timestamp = some(queryRowTimestampCallback(s, 0)) + timestamp = Opt.some(queryRowTimestampCallback(s, 0)) let query = selectTimestampByHashQuery(DbTable) let dbStmt = ?db.prepareStmt(query) @@ -314,60 +314,60 @@ proc getCursorTimestamp( proc whereClause( cursor: bool, - pubsubTopic: Option[PubsubTopic], + pubsubTopic: Opt[PubsubTopic], contentTopic: seq[ContentTopic], - startTime: Option[Timestamp], - endTime: Option[Timestamp], + startTime: Opt[Timestamp], + endTime: Opt[Timestamp], hashes: seq[WakuMessageHash], ascending: bool, -): Option[string] = +): Opt[string] = let cursorClause = if cursor: let comp = if ascending: ">" else: "<" - some("(timestamp, messageHash) " & comp & " (?, ?)") + Opt.some("(timestamp, messageHash) " & comp & " (?, ?)") else: - none(string) + Opt.none(string) let pubsubTopicClause = if pubsubTopic.isNone(): - none(string) + Opt.none(string) else: - some("pubsubTopic = (?)") + Opt.some("pubsubTopic = (?)") let contentTopicClause = if contentTopic.len <= 0: - none(string) + Opt.none(string) else: var where = "contentTopic IN (" where &= "?" for _ in 1 ..< contentTopic.len: where &= ", ?" where &= ")" - some(where) + Opt.some(where) let startTimeClause = if startTime.isNone(): - none(string) + Opt.none(string) else: - some("timestamp >= (?)") + Opt.some("timestamp >= (?)") let endTimeClause = if endTime.isNone(): - none(string) + Opt.none(string) else: - some("timestamp <= (?)") + Opt.some("timestamp <= (?)") let hashesClause = if hashes.len <= 0: - none(string) + Opt.none(string) else: var where = "messageHash IN (" where &= "?" for _ in 1 ..< hashes.len: where &= ", ?" where &= ")" - some(where) + Opt.some(where) return combineClauses( cursorClause, pubsubTopicClause, contentTopicClause, startTimeClause, endTimeClause, @@ -376,11 +376,11 @@ proc whereClause( proc execSelectMessagesWithLimitStmt( s: SqliteStmt, - cursor: Option[(Timestamp, WakuMessageHash)], - pubsubTopic: Option[PubsubTopic], + cursor: Opt[(Timestamp, WakuMessageHash)], + pubsubTopic: Opt[PubsubTopic], contentTopic: seq[ContentTopic], - startTime: Option[Timestamp], - endTime: Option[Timestamp], + startTime: Opt[Timestamp], + endTime: Opt[Timestamp], hashes: seq[WakuMessageHash], onRowCallback: DataProc, ): DatabaseResult[void] = @@ -438,7 +438,7 @@ proc execSelectMessagesWithLimitStmt( discard sqlite3_clear_bindings(s) # no errors possible proc selectMessagesWithLimitQuery( - table: string, where: Option[string], limit: uint, ascending = true + table: string, where: Opt[string], limit: uint, ascending = true ): SqlQueryStr = let order = if ascending: "ASC" else: "DESC" @@ -458,7 +458,7 @@ proc selectMessagesWithLimitQuery( return query proc selectMessageHashesWithLimitQuery( - table: string, where: Option[string], limit: uint, ascending = true + table: string, where: Opt[string], limit: uint, ascending = true ): SqlQueryStr = let order = if ascending: "ASC" else: "DESC" @@ -476,15 +476,15 @@ proc selectMessageHashesWithLimitQuery( proc selectMessagesByStoreQueryWithLimit*( db: SqliteDatabase, contentTopic: seq[ContentTopic], - pubsubTopic: Option[PubsubTopic], - cursor: Option[WakuMessageHash], - startTime: Option[Timestamp], - endTime: Option[Timestamp], + pubsubTopic: Opt[PubsubTopic], + cursor: Opt[WakuMessageHash], + startTime: Opt[Timestamp], + endTime: Opt[Timestamp], hashes: seq[WakuMessageHash], limit: uint, ascending: bool, ): DatabaseResult[seq[(WakuMessageHash, PubsubTopic, WakuMessage)]] = - var timeCursor = none((Timestamp, WakuMessageHash)) + var timeCursor = Opt.none((Timestamp, WakuMessageHash)) if cursor.isSome(): let hash: WakuMessageHash = cursor.get() @@ -494,7 +494,7 @@ proc selectMessagesByStoreQueryWithLimit*( if timeOpt.isNone(): return err("cursor not found") - timeCursor = some((timeOpt.get(), hash)) + timeCursor = Opt.some((timeOpt.get(), hash)) var rows: seq[(WakuMessageHash, PubsubTopic, WakuMessage)] = @[] @@ -536,15 +536,15 @@ proc selectMessagesByStoreQueryWithLimit*( proc selectMessageHashesByStoreQueryWithLimit*( db: SqliteDatabase, contentTopic: seq[ContentTopic], - pubsubTopic: Option[PubsubTopic], - cursor: Option[WakuMessageHash], - startTime: Option[Timestamp], - endTime: Option[Timestamp], + pubsubTopic: Opt[PubsubTopic], + cursor: Opt[WakuMessageHash], + startTime: Opt[Timestamp], + endTime: Opt[Timestamp], hashes: seq[WakuMessageHash], limit: uint, ascending: bool, ): DatabaseResult[seq[(WakuMessageHash, PubsubTopic, WakuMessage)]] = - var timeCursor = none((Timestamp, WakuMessageHash)) + var timeCursor = Opt.none((Timestamp, WakuMessageHash)) if cursor.isSome(): let hash: WakuMessageHash = cursor.get() @@ -554,7 +554,7 @@ proc selectMessageHashesByStoreQueryWithLimit*( if timeOpt.isNone(): return err("cursor not found") - timeCursor = some((timeOpt.get(), hash)) + timeCursor = Opt.some((timeOpt.get(), hash)) var rows: seq[(WakuMessageHash, PubsubTopic, WakuMessage)] = @[] diff --git a/logos_delivery/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim b/logos_delivery/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim index 913f3d307..e12fb12bc 100644 --- a/logos_delivery/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim +++ b/logos_delivery/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim @@ -1,9 +1,8 @@ -import logos_delivery/waku/compat/option_valueor # The code in this file is an adaptation of the Sqlite KV Store found in nim-eth. # https://github.com/status-im/nim-eth/blob/master/eth/db/kvstore_sqlite3.nim {.push raises: [].} -import std/options, stew/byteutils, chronicles, chronos, results +import stew/byteutils, chronicles, chronos, results import ../../../common/databases/db_sqlite, ../../../waku_core, @@ -73,10 +72,10 @@ method getMessages*( s: SqliteDriver, includeData = true, contentTopics = newSeq[ContentTopic](0), - pubsubTopic = none(PubsubTopic), - cursor = none(ArchiveCursor), - startTime = none(Timestamp), - endTime = none(Timestamp), + pubsubTopic = Opt.none(PubsubTopic), + cursor = Opt.none(ArchiveCursor), + startTime = Opt.none(Timestamp), + endTime = Opt.none(Timestamp), hashes = newSeq[WakuMessageHash](0), maxPageSize = DefaultPageSize, ascendingOrder = true, diff --git a/logos_delivery/waku/waku_archive/retention_policy/builder.nim b/logos_delivery/waku/waku_archive/retention_policy/builder.nim index ad49ed45e..62323dce2 100644 --- a/logos_delivery/waku/waku_archive/retention_policy/builder.nim +++ b/logos_delivery/waku/waku_archive/retention_policy/builder.nim @@ -1,7 +1,6 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} -import std/[strutils, options], regex, results +import std/strutils, regex, results import ../retention_policy, ./retention_policy_time, @@ -10,12 +9,12 @@ import proc new( T: type RetentionPolicy, retPolicy: string -): RetentionPolicyResult[Option[RetentionPolicy]] = +): RetentionPolicyResult[Opt[RetentionPolicy]] = let retPolicy = retPolicy.toLower # Validate the retention policy format if retPolicy == "" or retPolicy == "none": - return ok(none(RetentionPolicy)) + return ok(Opt.none(RetentionPolicy)) const StoreMessageRetentionPolicyRegex = re2"^\w+:\d*\.?\d+((g|m)b)?$" if not retPolicy.match(StoreMessageRetentionPolicyRegex): @@ -35,7 +34,7 @@ proc new( return err("invalid time retention policy argument") let retPolicy: RetentionPolicy = TimeRetentionPolicy.new(retentionTimeSeconds) - return ok(some(retPolicy)) + return ok(Opt.some(retPolicy)) elif policy == "capacity": var retentionCapacity: int try: @@ -44,7 +43,7 @@ proc new( return err("invalid capacity retention policy argument") let retPolicy: RetentionPolicy = CapacityRetentionPolicy.new(retentionCapacity) - return ok(some(retPolicy)) + return ok(Opt.some(retPolicy)) elif policy == "size": var retentionSize: string retentionSize = policyArgs @@ -81,7 +80,7 @@ proc new( return err("invalid size retention policy argument: a non-zero value is required") let retPolicy: RetentionPolicy = SizeRetentionPolicy.new(sizeQuantity) - return ok(some(retPolicy)) + return ok(Opt.some(retPolicy)) else: return err("unknown retention policy") diff --git a/logos_delivery/waku/waku_archive/retention_policy/retention_policy_capacity.nim b/logos_delivery/waku/waku_archive/retention_policy/retention_policy_capacity.nim index 088508b9b..ff4da6861 100644 --- a/logos_delivery/waku/waku_archive/retention_policy/retention_policy_capacity.nim +++ b/logos_delivery/waku/waku_archive/retention_policy/retention_policy_capacity.nim @@ -1,4 +1,3 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} import results, chronicles, chronos diff --git a/logos_delivery/waku/waku_core/peers.nim b/logos_delivery/waku/waku_core/peers.nim index c28ae5427..5fca2a649 100644 --- a/logos_delivery/waku/waku_core/peers.nim +++ b/logos_delivery/waku/waku_core/peers.nim @@ -1,8 +1,7 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} import - std/[options, sequtils, strutils, uri, net], + std/[sequtils, strutils, uri, net], results, chronos, chronicles, @@ -50,10 +49,10 @@ type type RemotePeerInfo* = ref object peerId*: PeerID addrs*: seq[MultiAddress] - enr*: Option[enr.Record] + enr*: Opt[enr.Record] protocols*: seq[string] shards*: seq[uint16] - mixPubKey*: Option[Curve25519Key] + mixPubKey*: Opt[Curve25519Key] agent*: string protoVersion*: string @@ -77,7 +76,7 @@ proc init*( T: typedesc[RemotePeerInfo], peerId: PeerID, addrs: seq[MultiAddress] = @[], - enr: Option[enr.Record] = none(enr.Record), + enr: Opt[enr.Record] = Opt.none(enr.Record), protocols: seq[string] = @[], shards: seq[uint16] = @[], publicKey: crypto.PublicKey = crypto.PublicKey(), @@ -89,7 +88,7 @@ proc init*( direction: PeerDirection = UnknownDirection, lastFailedConn: Moment = Moment.init(0, Second), numberFailedConn: int = 0, - mixPubKey: Option[Curve25519Key] = none(Curve25519Key), + mixPubKey: Opt[Curve25519Key] = Opt.none(Curve25519Key), ): T = RemotePeerInfo( peerId: peerId, @@ -113,7 +112,7 @@ proc init*( T: typedesc[RemotePeerInfo], peerId: string, addrs: seq[MultiAddress] = @[], - enr: Option[enr.Record] = none(enr.Record), + enr: Opt[enr.Record] = Opt.none(enr.Record), protocols: seq[string] = @[], shards: seq[uint16] = @[], ): T {.raises: [Defect, ResultError[cstring], LPError].} = @@ -240,19 +239,17 @@ proc parsePeerInfo*(maddrs: varargs[string]): Result[RemotePeerInfo, string] = parsePeerInfo(multiAddresses) -proc parseUrlPeerAddr*( - peerAddr: Option[string] -): Result[Option[RemotePeerInfo], string] = +proc parseUrlPeerAddr*(peerAddr: Opt[string]): Result[Opt[RemotePeerInfo], string] = # Checks whether the peerAddr parameter represents a valid p2p multiaddress. # The param must be in the format `(ip4|ip6)/tcp/p2p/$peerId` but URL-encoded if not peerAddr.isSome() or peerAddr.get() == "": - return ok(none(RemotePeerInfo)) + return ok(Opt.none(RemotePeerInfo)) let parsedAddr = decodeUrl(peerAddr.get()) let parsedPeerInfo = parsePeerInfo(parsedAddr).valueOr: return err("Failed parsing remote peer info: " & error) - return ok(some(parsedPeerInfo)) + return ok(Opt.some(parsedPeerInfo)) proc sortQuicFirst(addrs: seq[MultiAddress]): seq[MultiAddress] = ## QUIC addresses first, so they are dialed ahead of TCP. @@ -311,7 +308,7 @@ proc toRemotePeerInfo*(enrRec: enr.Record): Result[RemotePeerInfo, cstring] = error "Could not retrieve supported protocols from enr", peerId = peerId, msg = protocolsRes.error.msg - return ok(RemotePeerInfo.init(peerId, addrs, some(enrRec), protocols)) + return ok(RemotePeerInfo.init(peerId, addrs, Opt.some(enrRec), protocols)) converter toRemotePeerInfo*(peerRecord: PeerRecord): RemotePeerInfo = ## Converts peer records to dialable RemotePeerInfo @@ -324,7 +321,7 @@ converter toRemotePeerInfo*(peerInfo: PeerInfo): RemotePeerInfo = RemotePeerInfo( peerId: peerInfo.peerId, addrs: sortQuicFirst(peerInfo.listenAddrs), - enr: none(enr.Record), + enr: Opt.none(enr.Record), protocols: peerInfo.protocols, shards: @[], agent: peerInfo.agentVersion, diff --git a/logos_delivery/waku/waku_core/topics/content_topic.nim b/logos_delivery/waku/waku_core/topics/content_topic.nim index 23da9a24a..c8ba467fb 100644 --- a/logos_delivery/waku/waku_core/topics/content_topic.nim +++ b/logos_delivery/waku/waku_core/topics/content_topic.nim @@ -1,11 +1,10 @@ -import logos_delivery/waku/compat/option_valueor ## Waku content topics definition and namespacing utils ## ## See 23/WAKU2-TOPICS RFC: https://rfc.vac.dev/spec/23/ {.push raises: [].} -import std/options, std/strutils, results +import std/strutils, results import ./parsing export parsing @@ -19,7 +18,7 @@ const DefaultContentTopic* = ContentTopic("/waku/2/default-content/proto") ## Namespaced content topic type NsContentTopic* = object - generation*: Option[int] + generation*: Opt[int] application*: string version*: string name*: string @@ -27,7 +26,7 @@ type NsContentTopic* = object proc init*( T: type NsContentTopic, - generation: Option[int], + generation: Opt[int], application: string, version: string, name: string, @@ -90,7 +89,7 @@ proc parse*( if enc.len == 0: return err(ParsingError.missingPart("encoding")) - return ok(NsContentTopic.init(none(int), app, ver, name, enc)) + return ok(NsContentTopic.init(Opt.none(int), app, ver, name, enc)) of 5: if parts[0].len == 0: return err(ParsingError.missingPart("generation")) @@ -117,7 +116,7 @@ proc parse*( if enc.len == 0: return err(ParsingError.missingPart("encoding")) - return ok(NsContentTopic.init(some(gen), app, ver, name, enc)) + return ok(NsContentTopic.init(Opt.some(gen), app, ver, name, enc)) else: let errMsg = "Invalid content topic structure. Expected either //// or /////" diff --git a/logos_delivery/waku/waku_core/topics/sharding.nim b/logos_delivery/waku/waku_core/topics/sharding.nim index 704180554..e04e68e8e 100644 --- a/logos_delivery/waku/waku_core/topics/sharding.nim +++ b/logos_delivery/waku/waku_core/topics/sharding.nim @@ -1,11 +1,10 @@ -import logos_delivery/waku/compat/option_valueor ## Waku autosharding utils ## ## See 51/WAKU2-RELAY-SHARDING RFC: https://rfc.vac.dev/spec/51/#automatic-sharding {.push raises: [].} -import nimcrypto, std/options, std/tables, stew/endians2, results, stew/byteutils +import nimcrypto, std/tables, stew/endians2, results, stew/byteutils import ./content_topic, ./pubsub_topic diff --git a/logos_delivery/waku/waku_enr/capabilities.nim b/logos_delivery/waku/waku_enr/capabilities.nim index 42008e9c7..6a8ec4406 100644 --- a/logos_delivery/waku/waku_enr/capabilities.nim +++ b/logos_delivery/waku/waku_enr/capabilities.nim @@ -1,8 +1,6 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} -import - std/[options, bitops, sequtils, net, tables], results, eth/keys, libp2p/crypto/crypto +import std/[bitops, sequtils, net, tables], results, eth/keys, libp2p/crypto/crypto import ../common/enr, ../waku_core/codecs import libp2p_mix @@ -84,15 +82,15 @@ proc withWakuCapabilities*(builder: var EnrBuilder, caps: openArray[Capabilities # ENR record accessors (e.g., Record, TypedRecord, etc.) -func waku2*(record: TypedRecord): Option[CapabilitiesBitfield] = +func waku2*(record: TypedRecord): Opt[CapabilitiesBitfield] = let field = record.tryGet(CapabilitiesEnrField, seq[uint8]) if field.isNone(): - return none(CapabilitiesBitfield) + return Opt.none(CapabilitiesBitfield) if field.get().len != 1: - return none(CapabilitiesBitfield) + return Opt.none(CapabilitiesBitfield) - some(CapabilitiesBitfield(field.get()[0])) + Opt.some(CapabilitiesBitfield(field.get()[0])) proc supportsCapability*(r: Record, cap: Capabilities): bool = let recordRes = r.toTyped().valueOr: diff --git a/logos_delivery/waku/waku_enr/multiaddr.nim b/logos_delivery/waku/waku_enr/multiaddr.nim index a275b2599..db2e86ca1 100644 --- a/logos_delivery/waku/waku_enr/multiaddr.nim +++ b/logos_delivery/waku/waku_enr/multiaddr.nim @@ -1,8 +1,7 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} import - std/[options, sequtils, net], + std/[sequtils, net], stew/endians2, results, eth/keys, @@ -84,12 +83,12 @@ func withMultiaddrs*(builder: var EnrBuilder, multiaddrs: varargs[MultiAddress]) # ENR record accessors (e.g., Record, TypedRecord, etc.) -func multiaddrs*(record: TypedRecord): Option[seq[MultiAddress]] = +func multiaddrs*(record: TypedRecord): Opt[seq[MultiAddress]] = let field = record.tryGet(MultiaddrEnrField, seq[byte]) if field.isNone(): - return none(seq[MultiAddress]) + return Opt.none(seq[MultiAddress]) let decodeRes = decodeMultiaddrs(field.get()).valueOr: - return none(seq[MultiAddress]) + return Opt.none(seq[MultiAddress]) - some(decodeRes) + Opt.some(decodeRes) diff --git a/logos_delivery/waku/waku_enr/sharding.nim b/logos_delivery/waku/waku_enr/sharding.nim index 682772539..3d52fbfe8 100644 --- a/logos_delivery/waku/waku_enr/sharding.nim +++ b/logos_delivery/waku/waku_enr/sharding.nim @@ -1,8 +1,7 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} import - std/[options, bitops, sequtils, net], + std/[bitops, sequtils, net], stew/endians2, results, chronicles, @@ -58,9 +57,9 @@ func init*( ok(RelayShards(clusterId: clusterId, shardIds: indicesSeq)) -func topicsToRelayShards*(topics: seq[string]): Result[Option[RelayShards], string] = +func topicsToRelayShards*(topics: seq[string]): Result[Opt[RelayShards], string] = if topics.len < 1: - return ok(none(RelayShards)) + return ok(Opt.none(RelayShards)) let parsedTopicsRes = topics.mapIt(RelayShard.parse(it)) @@ -75,7 +74,7 @@ func topicsToRelayShards*(topics: seq[string]): Result[Option[RelayShards], stri parsedTopicsRes[0].get().clusterId, parsedTopicsRes.mapIt(it.get().shardId) ) - return ok(some(relayShard)) + return ok(Opt.some(relayShard)) func contains*(rs: RelayShards, clusterId, shardId: uint16): bool = return rs.clusterId == clusterId and rs.shardIds.contains(shardId) @@ -193,31 +192,31 @@ func withShardedTopics*( # ENR record accessors (e.g., Record, TypedRecord, etc.) -proc relayShardingIndicesList*(record: TypedRecord): Option[RelayShards] = +proc relayShardingIndicesList*(record: TypedRecord): Opt[RelayShards] = let field = record.tryGet(ShardingIndicesListEnrField, seq[byte]).valueOr: - return none(RelayShards) + return Opt.none(RelayShards) let indexList = fromIndicesList(field).valueOr: info "invalid shards list", error = error - return none(RelayShards) + return Opt.none(RelayShards) - some(indexList) + Opt.some(indexList) -proc relayShardingBitVector*(record: TypedRecord): Option[RelayShards] = +proc relayShardingBitVector*(record: TypedRecord): Opt[RelayShards] = let field = record.tryGet(ShardingBitVectorEnrField, seq[byte]).valueOr: - return none(RelayShards) + return Opt.none(RelayShards) let bitVector = fromBitVector(field).valueOr: info "invalid shards bit vector", error = error - return none(RelayShards) + return Opt.none(RelayShards) - some(bitVector) + Opt.some(bitVector) -proc relaySharding*(record: TypedRecord): Option[RelayShards] = +proc relaySharding*(record: TypedRecord): Opt[RelayShards] = let indexList = record.relayShardingIndicesList().valueOr: return record.relayShardingBitVector() - return some(indexList) + return Opt.some(indexList) ## Utils diff --git a/logos_delivery/waku/waku_filter_v2/client.nim b/logos_delivery/waku/waku_filter_v2/client.nim index 51ed18af3..ae12372ba 100644 --- a/logos_delivery/waku/waku_filter_v2/client.nim +++ b/logos_delivery/waku/waku_filter_v2/client.nim @@ -1,11 +1,9 @@ -import logos_delivery/waku/compat/option_valueor -import libp2p/crypto/crypto +import results, libp2p/crypto/crypto ## Waku Filter client for subscribing and receiving filtered messages {.push raises: [].} import - std/options, chronicles, chronos, libp2p/protocols/protocol, @@ -42,7 +40,7 @@ proc sendSubscribeRequest( trace "Sending filter subscribe request", peerId = servicePeer.peerId, filterSubscribeRequest - var connOpt: Option[Connection] + var connOpt: Opt[Connection] try: connOpt = await wfc.peerManager.dialPeer(servicePeer, WakuFilterSubscribeCodec) if connOpt.isNone(): diff --git a/logos_delivery/waku/waku_filter_v2/protocol.nim b/logos_delivery/waku/waku_filter_v2/protocol.nim index ab77ce2dc..768f303fe 100644 --- a/logos_delivery/waku/waku_filter_v2/protocol.nim +++ b/logos_delivery/waku/waku_filter_v2/protocol.nim @@ -1,10 +1,10 @@ -import logos_delivery/waku/compat/option_valueor ## Waku Filter protocol for subscribing and filtering messages {.push raises: [].} import - std/[options, sequtils, sets, tables], + results, + std/[sequtils, sets, tables], stew/byteutils, chronicles, chronos, @@ -48,7 +48,7 @@ proc setSubscriptionTimeout*(wf: WakuFilter, newTimeout: Duration) = proc subscribe( wf: WakuFilter, peerId: PeerID, - pubsubTopic: Option[PubsubTopic], + pubsubTopic: Opt[PubsubTopic], contentTopics: seq[ContentTopic], ): Future[FilterSubscribeResult] {.async.} = # TODO: check if this condition is valid??? @@ -81,7 +81,7 @@ proc subscribe( proc unsubscribe( wf: WakuFilter, peerId: PeerID, - pubsubTopic: Option[PubsubTopic], + pubsubTopic: Opt[PubsubTopic], contentTopics: seq[ContentTopic], ): FilterSubscribeResult = if pubsubTopic.isNone() or contentTopics.len == 0: @@ -163,7 +163,7 @@ proc handleSubscribeRequest*( return FilterSubscribeResponse( requestId: request.requestId, statusCode: error.kind.uint32, - statusDesc: some($error), + statusDesc: Opt.some($error), ) return FilterSubscribeResponse.ok(request.requestId) @@ -331,7 +331,7 @@ proc initProtocolHandler(wf: WakuFilter) = response = FilterSubscribeResponse( requestId: "N/A", statusCode: FilterSubscribeErrorKind.TOO_MANY_REQUESTS.uint32, - statusDesc: some("filter request rejected due rate limit exceeded"), + statusDesc: Opt.some("filter request rejected due rate limit exceeded"), ) try: @@ -360,7 +360,7 @@ proc new*( maxFilterPeers: uint32 = MaxFilterPeers, maxFilterCriteriaPerPeer: uint32 = MaxFilterCriteriaPerPeer, messageCacheTTL: Duration = MessageCacheTTL, - rateLimitSetting: Option[RateLimitSetting] = none[RateLimitSetting](), + rateLimitSetting: Opt[RateLimitSetting] = Opt.none(RateLimitSetting), ): T = let wf = WakuFilter( subscriptions: FilterSubscriptions.new( diff --git a/logos_delivery/waku/waku_filter_v2/rpc.nim b/logos_delivery/waku/waku_filter_v2/rpc.nim index a81a7bd9a..30c0742c0 100644 --- a/logos_delivery/waku/waku_filter_v2/rpc.nim +++ b/logos_delivery/waku/waku_filter_v2/rpc.nim @@ -1,6 +1,6 @@ {.push raises: [].} -import json_serialization, std/options +import results, json_serialization import ../waku_core type @@ -14,13 +14,13 @@ type FilterSubscribeRequest* = object # Request from client to service node requestId*: string filterSubscribeType*: FilterSubscribeType - pubsubTopic*: Option[PubsubTopic] + pubsubTopic*: Opt[PubsubTopic] contentTopics*: seq[ContentTopic] FilterSubscribeResponse* = object # Response from service node to client requestId*: string statusCode*: uint32 - statusDesc*: Option[string] + statusDesc*: Opt[string] MessagePush* = object # Message pushed from service node to client wakuMessage*: WakuMessage @@ -40,7 +40,7 @@ proc subscribe*( FilterSubscribeRequest( requestId: requestId, filterSubscribeType: SUBSCRIBE, - pubsubTopic: some(pubsubTopic), + pubsubTopic: Opt.some(pubsubTopic), contentTopics: contentTopics, ) @@ -53,7 +53,7 @@ proc unsubscribe*( FilterSubscribeRequest( requestId: requestId, filterSubscribeType: UNSUBSCRIBE, - pubsubTopic: some(pubsubTopic), + pubsubTopic: Opt.some(pubsubTopic), contentTopics: contentTopics, ) @@ -61,11 +61,13 @@ proc unsubscribeAll*(T: type FilterSubscribeRequest, requestId: string): T = FilterSubscribeRequest(requestId: requestId, filterSubscribeType: UNSUBSCRIBE_ALL) proc ok*(T: type FilterSubscribeResponse, requestId: string, desc = "OK"): T = - FilterSubscribeResponse(requestId: requestId, statusCode: 200, statusDesc: some(desc)) + FilterSubscribeResponse( + requestId: requestId, statusCode: 200, statusDesc: Opt.some(desc) + ) proc `$`*(err: FilterSubscribeResponse): string = "FilterSubscribeResponse of req:" & err.requestId & " [" & $err.statusCode & "] " & - $err.statusDesc + err.statusDesc.get("") proc `$`*(req: FilterSubscribeRequest): string = "FilterSubscribeRequest of req:" & req.requestId & " [" & $req.filterSubscribeType & diff --git a/logos_delivery/waku/waku_filter_v2/rpc_codec.nim b/logos_delivery/waku/waku_filter_v2/rpc_codec.nim index 94bdb367c..98c7111e2 100644 --- a/logos_delivery/waku/waku_filter_v2/rpc_codec.nim +++ b/logos_delivery/waku/waku_filter_v2/rpc_codec.nim @@ -1,7 +1,6 @@ {.push raises: [].} -import std/options -import ../common/protobuf, ../waku_core, ./rpc +import results, ../common/protobuf, ../waku_core, ./rpc const DefaultMaxSubscribeSize* = 10 * DefaultMaxWakuMessageSize + 64 * 1024 @@ -39,9 +38,9 @@ proc decode*(T: type FilterSubscribeRequest, buffer: seq[byte]): ProtobufResult[ var pubsubTopic: PubsubTopic if not ?pb.getField(10, pubsubTopic): - rpc.pubsubTopic = none(PubsubTopic) + rpc.pubsubTopic = Opt.none(PubsubTopic) else: - rpc.pubsubTopic = some(pubsubTopic) + rpc.pubsubTopic = Opt.some(pubsubTopic) discard ?pb.getRepeatedField(11, rpc.contentTopics) @@ -68,9 +67,9 @@ proc decode*(T: type FilterSubscribeResponse, buffer: seq[byte]): ProtobufResult var statusDesc: string if not ?pb.getField(11, statusDesc): - rpc.statusDesc = none(string) + rpc.statusDesc = Opt.none(string) else: - rpc.statusDesc = some(statusDesc) + rpc.statusDesc = Opt.some(statusDesc) ok(rpc) diff --git a/logos_delivery/waku/waku_filter_v2/subscriptions.nim b/logos_delivery/waku/waku_filter_v2/subscriptions.nim index 5c942cbf5..e1ec1664d 100644 --- a/logos_delivery/waku/waku_filter_v2/subscriptions.nim +++ b/logos_delivery/waku/waku_filter_v2/subscriptions.nim @@ -1,8 +1,7 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} import - std/[options, sets, tables, sequtils], + std/[sets, tables, sequtils], chronicles, chronos, libp2p/peerid, diff --git a/logos_delivery/waku/waku_keystore/keystore.nim b/logos_delivery/waku/waku_keystore/keystore.nim index 757024591..109972451 100644 --- a/logos_delivery/waku/waku_keystore/keystore.nim +++ b/logos_delivery/waku/waku_keystore/keystore.nim @@ -1,7 +1,6 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} -import options, json, strutils, sequtils, std/[tables, os] +import json, strutils, sequtils, std/[tables, os] import ./keyfile, ./conversion_utils, ./protocol_types, ./utils diff --git a/logos_delivery/waku/waku_lightpush/callbacks.nim b/logos_delivery/waku/waku_lightpush/callbacks.nim index 80d9c2439..16cdef9a5 100644 --- a/logos_delivery/waku/waku_lightpush/callbacks.nim +++ b/logos_delivery/waku/waku_lightpush/callbacks.nim @@ -1,4 +1,3 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} import results diff --git a/logos_delivery/waku/waku_lightpush/client.nim b/logos_delivery/waku/waku_lightpush/client.nim index 9572b9323..b282c2fa3 100644 --- a/logos_delivery/waku/waku_lightpush/client.nim +++ b/logos_delivery/waku/waku_lightpush/client.nim @@ -1,8 +1,7 @@ import libp2p/crypto/crypto -import logos_delivery/waku/compat/option_valueor {.push raises: [].} -import std/options, results, chronicles, chronos, metrics, bearssl/rand, stew/byteutils +import results, chronicles, chronos, metrics, bearssl/rand, stew/byteutils import libp2p/peerid, libp2p/stream/connection import ../waku_core/peers, @@ -35,7 +34,7 @@ proc sendPushRequest( wl: WakuLightPushClient, req: LightPushRequest, peer: PeerId | RemotePeerInfo, - conn: Option[Connection] = none(Connection), + conn: Opt[Connection] = Opt.none(Connection), ): Future[WakuLightPushResult] {.async.} = let connection = conn.valueOr: (await wl.peerManager.dialPeer(peer, WakuLightPushCodec)).valueOr: @@ -74,7 +73,7 @@ proc sendPushRequest( proc publish*( wl: WakuLightPushClient, - pubSubTopic: Option[PubsubTopic] = none(PubsubTopic), + pubSubTopic: Opt[PubsubTopic] = Opt.none(PubsubTopic), wakuMessage: WakuMessage, dest: Connection | PeerId | RemotePeerInfo, ): Future[WakuLightPushResult] {.async, gcsafe.} = @@ -100,7 +99,7 @@ proc publish*( let relayPeerCount = when dest is Connection: - ?await wl.sendPushRequest(request, dest.peerId, some(dest)) + ?await wl.sendPushRequest(request, dest.peerId, Opt.some(dest)) else: ?await wl.sendPushRequest(request, dest) @@ -115,7 +114,7 @@ proc publishToAny*( return lighpushErrorResult( LightPushErrorCode.NO_PEERS_TO_RELAY, "no suitable remote peers" ) - return await wl.publish(some(pubsubTopic), wakuMessage, peer) + return await wl.publish(Opt.some(pubsubTopic), wakuMessage, peer) proc publishWithConn*( wl: WakuLightPushClient, @@ -124,4 +123,4 @@ proc publishWithConn*( conn: Connection, destPeer: PeerId, ): Future[WakuLightPushResult] {.async, gcsafe.} = - return await wl.publish(some(pubSubTopic), message, conn) + return await wl.publish(Opt.some(pubSubTopic), message, conn) diff --git a/logos_delivery/waku/waku_lightpush/common.nim b/logos_delivery/waku/waku_lightpush/common.nim index f0762e2d2..00b26bafc 100644 --- a/logos_delivery/waku/waku_lightpush/common.nim +++ b/logos_delivery/waku/waku_lightpush/common.nim @@ -1,6 +1,6 @@ {.push raises: [].} -import std/options, results, chronos, libp2p/peerid +import results, chronos, libp2p/peerid import ../waku_core, ./rpc, ../waku_relay/protocol from ../waku_core/codecs import WakuLightPushCodec @@ -21,7 +21,7 @@ const LightPushErrorCode* = ( NO_PEERS_TO_RELAY: LightPushStatusCode(505), ) -type ErrorStatus* = tuple[code: LightpushStatusCode, desc: Option[string]] +type ErrorStatus* = tuple[code: LightpushStatusCode, desc: Opt[string]] type WakuLightPushResult* = Result[uint32, ErrorStatus] type PushMessageHandler* = proc( @@ -51,40 +51,42 @@ func lightpushSuccessResult*(relayPeerCount: uint32): WakuLightPushResult = return ok(relayPeerCount) func lightpushResultInternalError*(msg: string): WakuLightPushResult = - return err((LightPushErrorCode.INTERNAL_SERVER_ERROR, some(msg))) + return err((LightPushErrorCode.INTERNAL_SERVER_ERROR, Opt.some(msg))) func lightpushResultBadRequest*(msg: string): WakuLightPushResult = - return err((LightPushErrorCode.BAD_REQUEST, some(msg))) + return err((LightPushErrorCode.BAD_REQUEST, Opt.some(msg))) func lightpushResultServiceUnavailable*(msg: string): WakuLightPushResult = - return err((LightPushErrorCode.SERVICE_NOT_AVAILABLE, some(msg))) + return err((LightPushErrorCode.SERVICE_NOT_AVAILABLE, Opt.some(msg))) func lighpushErrorResult*( statusCode: LightpushStatusCode, desc: string ): WakuLightPushResult = - return err((statusCode, some(desc))) + return err((statusCode, Opt.some(desc))) func mapPubishingErrorToPushResult*( publishOutcome: PublishOutcome ): WakuLightPushResult = case publishOutcome of NoTopicSpecified: - return - err((LightPushErrorCode.INVALID_MESSAGE, some("Empty topic, skipping publish"))) + return err( + (LightPushErrorCode.INVALID_MESSAGE, Opt.some("Empty topic, skipping publish")) + ) of DuplicateMessage: - return - err((LightPushErrorCode.INVALID_MESSAGE, some("Dropping already-seen message"))) + return err( + (LightPushErrorCode.INVALID_MESSAGE, Opt.some("Dropping already-seen message")) + ) of NoPeersToPublish: return err( ( LightPushErrorCode.NO_PEERS_TO_RELAY, - some("No peers for topic, skipping publish"), + Opt.some("No peers for topic, skipping publish"), ) ) of CannotGenerateMessageId: return err( ( LightPushErrorCode.INTERNAL_SERVER_ERROR, - some("Error generating message id, skipping publish"), + Opt.some("Error generating message id, skipping publish"), ) ) diff --git a/logos_delivery/waku/waku_lightpush/protocol.nim b/logos_delivery/waku/waku_lightpush/protocol.nim index 7c6c55928..a698dd344 100644 --- a/logos_delivery/waku/waku_lightpush/protocol.nim +++ b/logos_delivery/waku/waku_lightpush/protocol.nim @@ -1,15 +1,7 @@ import libp2p/crypto/crypto -import logos_delivery/waku/compat/option_valueor {.push raises: [].} -import - std/[options, strutils], - results, - stew/byteutils, - chronicles, - chronos, - metrics, - bearssl/rand +import std/strutils, results, stew/byteutils, chronicles, chronos, metrics, bearssl/rand import ../node/peer_manager/peer_manager, ../waku_core, @@ -28,7 +20,7 @@ type WakuLightPush* = ref object of LPProtocol peerManager*: PeerManager pushHandler*: PushMessageHandler requestRateLimiter*: RequestRateLimiter - autoSharding: Option[Sharding] + autoSharding: Opt[Sharding] proc handleRequest( wl: WakuLightPush, peerId: PeerId, pushRequest: LightpushRequest @@ -38,29 +30,30 @@ proc handleRequest( let msg = "Pubsub topic must be specified when static sharding is enabled" error "lightpush request handling error", error = msg return WakuLightPushResult.err( - (code: LightPushErrorCode.INVALID_MESSAGE, desc: some(msg)) + (code: LightPushErrorCode.INVALID_MESSAGE, desc: Opt.some(msg)) ) let parsedTopic = NsContentTopic.parse(pushRequest.message.contentTopic).valueOr: let msg = "Invalid content-topic:" & $error error "lightpush request handling error", error = msg return WakuLightPushResult.err( - (code: LightPushErrorCode.INVALID_MESSAGE, desc: some(msg)) + (code: LightPushErrorCode.INVALID_MESSAGE, desc: Opt.some(msg)) ) wl.autoSharding.get().getShard(parsedTopic).valueOr: let msg = "Auto-sharding error: " & error error "lightpush request handling error", error = msg return WakuLightPushResult.err( - (code: LightPushErrorCode.INTERNAL_SERVER_ERROR, desc: some(msg)) + (code: LightPushErrorCode.INTERNAL_SERVER_ERROR, desc: Opt.some(msg)) ) # ensure checking topic will not cause error at gossipsub level if pubsubTopic.isEmptyOrWhitespace(): let msg = "topic must not be empty" error "lightpush request handling error", error = msg - return - WakuLightPushResult.err((code: LightPushErrorCode.BAD_REQUEST, desc: some(msg))) + return WakuLightPushResult.err( + (code: LightPushErrorCode.BAD_REQUEST, desc: Opt.some(msg)) + ) waku_lightpush_v3_messages.inc(labelValues = ["PushRequest"]) @@ -89,13 +82,13 @@ proc handleRequest*( return LightPushResponse( requestId: "N/A", # due to decode failure we don't know requestId statusCode: errorCode, - statusDesc: some(desc), + statusDesc: Opt.some(desc), ) let relayPeerCount = (await wl.handleRequest(peerId, request)).valueOr: let desc = error.desc waku_lightpush_v3_errors.inc(labelValues = [$error.code]) - error "failed to push message", error = desc + error "failed to push message", error = desc.get("") return LightPushResponse( requestId: request.requestId, statusCode: error.code, statusDesc: desc ) @@ -103,8 +96,8 @@ proc handleRequest*( return LightPushResponse( requestId: request.requestId, statusCode: LightPushSuccessCode.SUCCESS, - statusDesc: none[string](), - relayPeerCount: some(relayPeerCount), + statusDesc: Opt.none(string), + relayPeerCount: Opt.some(relayPeerCount), ) proc initProtocolHandler(wl: WakuLightPush) = @@ -140,7 +133,7 @@ proc initProtocolHandler(wl: WakuLightPush) = ## attack surface requestId: "N/A", statusCode: LightPushErrorCode.TOO_MANY_REQUESTS, - statusDesc: some(TooManyRequestsMessage), + statusDesc: Opt.some(TooManyRequestsMessage), ) ) @@ -160,8 +153,8 @@ proc new*( peerManager: PeerManager, rng: crypto.Rng, pushHandler: PushMessageHandler, - autoSharding: Option[Sharding], - rateLimitSetting: Option[RateLimitSetting] = none[RateLimitSetting](), + autoSharding: Opt[Sharding], + rateLimitSetting: Opt[RateLimitSetting] = Opt.none(RateLimitSetting), ): T = let wl = WakuLightPush( rng: rng, diff --git a/logos_delivery/waku/waku_lightpush/rpc.nim b/logos_delivery/waku/waku_lightpush/rpc.nim index f19563b99..228d9f836 100644 --- a/logos_delivery/waku/waku_lightpush/rpc.nim +++ b/logos_delivery/waku/waku_lightpush/rpc.nim @@ -1,7 +1,6 @@ {.push raises: [].} -import std/options -import ../waku_core +import results, ../waku_core type LightPushStatusCode* = distinct uint32 proc `==`*(a, b: LightPushStatusCode): bool {.borrow.} @@ -10,11 +9,11 @@ proc `$`*(code: LightPushStatusCode): string {.borrow.} type LightpushRequest* = object requestId*: string - pubSubTopic*: Option[PubsubTopic] + pubSubTopic*: Opt[PubsubTopic] message*: WakuMessage LightPushResponse* = object requestId*: string statusCode*: LightPushStatusCode - statusDesc*: Option[string] - relayPeerCount*: Option[uint32] + statusDesc*: Opt[string] + relayPeerCount*: Opt[uint32] diff --git a/logos_delivery/waku/waku_lightpush/rpc_codec.nim b/logos_delivery/waku/waku_lightpush/rpc_codec.nim index 0a4f934d6..cec295f24 100644 --- a/logos_delivery/waku/waku_lightpush/rpc_codec.nim +++ b/logos_delivery/waku/waku_lightpush/rpc_codec.nim @@ -1,7 +1,6 @@ {.push raises: [].} -import std/options -import ../common/protobuf, ../waku_core, ./rpc +import results, ../common/protobuf, ../waku_core, ./rpc const DefaultMaxRpcSize* = -1 @@ -27,9 +26,9 @@ proc decode*(T: type LightpushRequest, buffer: seq[byte]): ProtobufResult[T] = var pubSubTopic: PubsubTopic if not ?pb.getField(20, pubSubTopic): - rpc.pubSubTopic = none(PubsubTopic) + rpc.pubSubTopic = Opt.none(PubsubTopic) else: - rpc.pubSubTopic = some(pubSubTopic) + rpc.pubSubTopic = Opt.some(pubSubTopic) var messageBuf: seq[byte] if not ?pb.getField(21, messageBuf): @@ -68,14 +67,14 @@ proc decode*(T: type LightPushResponse, buffer: seq[byte]): ProtobufResult[T] = var statusDesc: string if not ?pb.getField(11, statusDesc): - rpc.statusDesc = none(string) + rpc.statusDesc = Opt.none(string) else: - rpc.statusDesc = some(statusDesc) + rpc.statusDesc = Opt.some(statusDesc) var relayPeerCount: uint32 if not ?pb.getField(12, relayPeerCount): - rpc.relayPeerCount = none(uint32) + rpc.relayPeerCount = Opt.none(uint32) else: - rpc.relayPeerCount = some(relayPeerCount) + rpc.relayPeerCount = Opt.some(relayPeerCount) return ok(rpc) diff --git a/logos_delivery/waku/waku_lightpush/self_req_handler.nim b/logos_delivery/waku/waku_lightpush/self_req_handler.nim index 06a0d3715..141af9ad9 100644 --- a/logos_delivery/waku/waku_lightpush/self_req_handler.nim +++ b/logos_delivery/waku/waku_lightpush/self_req_handler.nim @@ -9,11 +9,11 @@ ## which spawn a full service Waku node ## that could be used also as a lightpush client, helping testing and development. -import results, chronos, std/options, metrics +import results, chronos, metrics import ../waku_core, ./protocol, ./common, ./rpc, ./rpc_codec, ../utils/requests proc handleSelfLightPushRequest*( - self: WakuLightPush, pubSubTopic: Option[PubsubTopic], message: WakuMessage + self: WakuLightPush, pubSubTopic: Opt[PubsubTopic], message: WakuMessage ): Future[WakuLightPushResult] {.async.} = ## Handles the lightpush requests made by the node to itself. ## Normally used in REST-lightpush requests diff --git a/logos_delivery/waku/waku_lightpush_legacy/client.nim b/logos_delivery/waku/waku_lightpush_legacy/client.nim index 0ed5ca823..1cd3a4302 100644 --- a/logos_delivery/waku/waku_lightpush_legacy/client.nim +++ b/logos_delivery/waku/waku_lightpush_legacy/client.nim @@ -1,8 +1,7 @@ import libp2p/crypto/crypto -import logos_delivery/waku/compat/option_valueor {.push raises: [].} -import std/options, results, chronicles, chronos, metrics, bearssl/rand, stew/byteutils +import results, chronicles, chronos, metrics, bearssl/rand, stew/byteutils import libp2p/peerid import ../waku_core/peers, @@ -38,7 +37,7 @@ proc sendPushRequest( defer: await connection.closeWithEOF() - let rpc = PushRPC(requestId: generateRequestId(wl.rng), request: some(req)) + let rpc = PushRPC(requestId: generateRequestId(wl.rng), request: Opt.some(req)) await connection.writeLP(rpc.encode().buffer) var buffer: seq[byte] diff --git a/logos_delivery/waku/waku_lightpush_legacy/protocol.nim b/logos_delivery/waku/waku_lightpush_legacy/protocol.nim index b3d728f9c..ba982f8f1 100644 --- a/logos_delivery/waku/waku_lightpush_legacy/protocol.nim +++ b/logos_delivery/waku/waku_lightpush_legacy/protocol.nim @@ -1,7 +1,7 @@ import libp2p/crypto/crypto {.push raises: [].} -import std/options, results, stew/byteutils, chronicles, chronos, metrics, bearssl/rand +import results, stew/byteutils, chronicles, chronos, metrics, bearssl/rand import ../node/peer_manager/peer_manager, ../waku_core, @@ -62,8 +62,8 @@ proc handleRequest*( if not isSuccess: waku_lightpush_errors.inc(labelValues = [pushResponseInfo]) error "failed to push message", error = pushResponseInfo - let response = PushResponse(isSuccess: isSuccess, info: some(pushResponseInfo)) - let rpc = PushRPC(requestId: requestId, response: some(response)) + let response = PushResponse(isSuccess: isSuccess, info: Opt.some(pushResponseInfo)) + let rpc = PushRPC(requestId: requestId, response: Opt.some(response)) return rpc proc initProtocolHandler(wl: WakuLegacyLightPush) = @@ -98,8 +98,9 @@ proc initProtocolHandler(wl: WakuLegacyLightPush) = ## in reject case as it is comparably too expensive and opens possible ## attack surface requestId: "N/A", - response: - some(PushResponse(isSuccess: false, info: some(TooManyRequestsMessage))), + response: Opt.some( + PushResponse(isSuccess: false, info: Opt.some(TooManyRequestsMessage)) + ), ) ) @@ -119,7 +120,7 @@ proc new*( peerManager: PeerManager, rng: crypto.Rng, pushHandler: PushMessageHandler, - rateLimitSetting: Option[RateLimitSetting] = none[RateLimitSetting](), + rateLimitSetting: Opt[RateLimitSetting] = Opt.none(RateLimitSetting), ): T = let wl = WakuLegacyLightPush( rng: rng, diff --git a/logos_delivery/waku/waku_lightpush_legacy/rpc.nim b/logos_delivery/waku/waku_lightpush_legacy/rpc.nim index 33ba3f5e3..ba92bd55f 100644 --- a/logos_delivery/waku/waku_lightpush_legacy/rpc.nim +++ b/logos_delivery/waku/waku_lightpush_legacy/rpc.nim @@ -1,7 +1,6 @@ {.push raises: [].} -import std/options -import ../waku_core +import results, ../waku_core type PushRequest* = object @@ -10,9 +9,9 @@ type PushResponse* = object isSuccess*: bool - info*: Option[string] + info*: Opt[string] PushRPC* = object requestId*: string - request*: Option[PushRequest] - response*: Option[PushResponse] + request*: Opt[PushRequest] + response*: Opt[PushResponse] diff --git a/logos_delivery/waku/waku_lightpush_legacy/rpc_codec.nim b/logos_delivery/waku/waku_lightpush_legacy/rpc_codec.nim index 25d2bd210..a31c71f03 100644 --- a/logos_delivery/waku/waku_lightpush_legacy/rpc_codec.nim +++ b/logos_delivery/waku/waku_lightpush_legacy/rpc_codec.nim @@ -1,7 +1,6 @@ {.push raises: [].} -import std/options -import ../common/protobuf, ../waku_core, ./rpc +import results, ../common/protobuf, ../waku_core, ./rpc const DefaultMaxRpcSize* = -1 @@ -53,9 +52,9 @@ proc decode*(T: type PushResponse, buffer: seq[byte]): ProtobufResult[T] = var info: string if not ?pb.getField(2, info): - rpc.info = none(string) + rpc.info = Opt.none(string) else: - rpc.info = some(info) + rpc.info = Opt.some(info) ok(rpc) @@ -81,16 +80,16 @@ proc decode*(T: type PushRPC, buffer: seq[byte]): ProtobufResult[T] = var requestBuffer: seq[byte] if not ?pb.getField(2, requestBuffer): - rpc.request = none(PushRequest) + rpc.request = Opt.none(PushRequest) else: let request = ?PushRequest.decode(requestBuffer) - rpc.request = some(request) + rpc.request = Opt.some(request) var responseBuffer: seq[byte] if not ?pb.getField(3, responseBuffer): - rpc.response = none(PushResponse) + rpc.response = Opt.none(PushResponse) else: let response = ?PushResponse.decode(responseBuffer) - rpc.response = some(response) + rpc.response = Opt.some(response) ok(rpc) diff --git a/logos_delivery/waku/waku_lightpush_legacy/self_req_handler.nim b/logos_delivery/waku/waku_lightpush_legacy/self_req_handler.nim index 3c5d09a9c..c1c04ad44 100644 --- a/logos_delivery/waku/waku_lightpush_legacy/self_req_handler.nim +++ b/logos_delivery/waku/waku_lightpush_legacy/self_req_handler.nim @@ -9,7 +9,7 @@ ## which spawn a full service Waku node ## that could be used also as a lightpush client, helping testing and development. -import results, chronos, chronicles, std/options, metrics, stew/byteutils +import results, chronos, chronicles, metrics, stew/byteutils import ../waku_core, ./protocol, @@ -31,7 +31,7 @@ proc handleSelfLightPushRequest*( let selfPeerId = self.peerManager.switch.peerInfo.peerId let req = PushRequest(pubSubTopic: pubSubTopic, message: message) - let rpc = PushRPC(requestId: generateRequestId(self.rng), request: some(req)) + let rpc = PushRPC(requestId: generateRequestId(self.rng), request: Opt.some(req)) let respRpc = await self.handleRequest(selfPeerId, rpc.encode().buffer) diff --git a/logos_delivery/waku/waku_metadata/protocol.nim b/logos_delivery/waku/waku_metadata/protocol.nim index d080ff2b7..2a59fd487 100644 --- a/logos_delivery/waku/waku_metadata/protocol.nim +++ b/logos_delivery/waku/waku_metadata/protocol.nim @@ -1,8 +1,7 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} import - std/[options, sequtils], + std/sequtils, results, chronicles, chronos, @@ -29,7 +28,7 @@ proc respond( m: WakuMetadata, conn: Connection ): Future[Result[void, string]] {.async, gcsafe.} = let response = WakuMetadataResponse( - clusterId: some(m.clusterId.uint32), shards: m.getShards().mapIt(it.uint32) + clusterId: Opt.some(m.clusterId.uint32), shards: m.getShards().mapIt(it.uint32) ) let res = catch: @@ -43,7 +42,7 @@ proc request*( m: WakuMetadata, conn: Connection ): Future[Result[WakuMetadataResponse, string]] {.async, gcsafe.} = let request = WakuMetadataRequest( - clusterId: some(m.clusterId), shards: m.getShards().mapIt(it.uint32) + clusterId: Opt.some(m.clusterId), shards: m.getShards().mapIt(it.uint32) ) let writeRes = catch: diff --git a/logos_delivery/waku/waku_metadata/rpc.nim b/logos_delivery/waku/waku_metadata/rpc.nim index fcb11e57d..37a9e77d0 100644 --- a/logos_delivery/waku/waku_metadata/rpc.nim +++ b/logos_delivery/waku/waku_metadata/rpc.nim @@ -1,15 +1,15 @@ {.push raises: [].} -import std/options +import results import ../common/protobuf type WakuMetadataRequest* = object - clusterId*: Option[uint32] + clusterId*: Opt[uint32] shards*: seq[uint32] type WakuMetadataResponse* = object - clusterId*: Option[uint32] + clusterId*: Opt[uint32] shards*: seq[uint32] proc encode*(rpc: WakuMetadataRequest): ProtoBuffer = @@ -29,9 +29,9 @@ proc decode*(T: type WakuMetadataRequest, buffer: seq[byte]): ProtoResult[T] = var clusterId: uint64 if not ?pb.getField(1, clusterId): - rpc.clusterId = none(uint32) + rpc.clusterId = Opt.none(uint32) else: - rpc.clusterId = some(clusterId.uint32) + rpc.clusterId = Opt.some(clusterId.uint32) var shards: seq[uint64] if ?pb.getPackedRepeatedField(3, shards): @@ -63,9 +63,9 @@ proc decode*(T: type WakuMetadataResponse, buffer: seq[byte]): ProtoResult[T] = var clusterId: uint64 if not ?pb.getField(1, clusterId): - rpc.clusterId = none(uint32) + rpc.clusterId = Opt.none(uint32) else: - rpc.clusterId = some(clusterId.uint32) + rpc.clusterId = Opt.some(clusterId.uint32) var shards: seq[uint64] diff --git a/logos_delivery/waku/waku_mix/protocol.nim b/logos_delivery/waku/waku_mix/protocol.nim index 613b6e3c7..3ab5bfd66 100644 --- a/logos_delivery/waku/waku_mix/protocol.nim +++ b/logos_delivery/waku/waku_mix/protocol.nim @@ -1,7 +1,6 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} -import chronicles, std/options, chronos, results, metrics +import chronicles, chronos, results, metrics import libp2p/crypto/curve25519, @@ -66,7 +65,7 @@ proc processBootNodes( count.inc() peermgr.addPeer( - RemotePeerInfo.init(peerId, @[multiAddr], mixPubKey = some(node.pubKey)) + RemotePeerInfo.init(peerId, @[multiAddr], mixPubKey = Opt.some(node.pubKey)) ) mix_pool_size.set(count) info "using mix bootstrap nodes ", count = count diff --git a/logos_delivery/waku/waku_peer_exchange/client.nim b/logos_delivery/waku/waku_peer_exchange/client.nim index 1f15d76fc..f2ceb67c4 100644 --- a/logos_delivery/waku/waku_peer_exchange/client.nim +++ b/logos_delivery/waku/waku_peer_exchange/client.nim @@ -1,9 +1,14 @@ -import logos_delivery/waku/compat/option_valueor -import std/options, results, chronicles, chronos, metrics +import results +import chronicles, chronos, metrics +import + logos_delivery/waku/[ + waku_peer_exchange/common, + waku_peer_exchange/rpc, + waku_peer_exchange/rpc_codec, + node/peer_manager, + ] -import ./common, ./rpc, ./rpc_codec, ../node/peer_manager - -from ../waku_core/codecs import WakuPeerExchangeCodec +from logos_delivery/waku/waku_core/codecs import WakuPeerExchangeCodec declarePublicGauge waku_px_peers_received_total, "number of ENRs received via peer exchange" @@ -26,7 +31,7 @@ proc request*( var buffer: seq[byte] var callResult = - (status_code: PeerExchangeResponseStatusCode.SUCCESS, status_desc: none(string)) + (status_code: PeerExchangeResponseStatusCode.SUCCESS, status_desc: Opt.none(string)) try: await conn.writeLP(rpc.encode().buffer) buffer = await conn.readLp(DefaultMaxRpcSize.int) @@ -35,7 +40,7 @@ proc request*( waku_px_client_errors.inc(labelValues = ["error_sending_or_receiving_px_req"]) callResult = ( status_code: PeerExchangeResponseStatusCode.SERVICE_UNAVAILABLE, - status_desc: some($exc.msg), + status_desc: Opt.some($exc.msg), ) finally: # close, no more data is expected @@ -50,7 +55,7 @@ proc request*( return err( ( status_code: PeerExchangeResponseStatusCode.BAD_RESPONSE, - status_desc: some($error), + status_desc: Opt.some($error), ) ) if decoded.response.status_code != PeerExchangeResponseStatusCode.SUCCESS: @@ -74,7 +79,7 @@ proc request*( return err( ( status_code: PeerExchangeResponseStatusCode.DIAL_FAILURE, - status_desc: some(dialFailure), + status_desc: Opt.some(dialFailure), ) ) return await wpx.request(numPeers, connOpt.get()) @@ -83,7 +88,7 @@ proc request*( return err( ( status_code: PeerExchangeResponseStatusCode.BAD_RESPONSE, - status_desc: some("exception dialing peer: " & getCurrentExceptionMsg()), + status_desc: Opt.some("exception dialing peer: " & getCurrentExceptionMsg()), ) ) @@ -97,7 +102,7 @@ proc request*( return err( ( status_code: PeerExchangeResponseStatusCode.SERVICE_UNAVAILABLE, - status_desc: some(peerNotFoundFailure), + status_desc: Opt.some(peerNotFoundFailure), ) ) return await wpx.request(numPeers, peerOpt.get()) diff --git a/logos_delivery/waku/waku_peer_exchange/protocol.nim b/logos_delivery/waku/waku_peer_exchange/protocol.nim index ce1f0cd04..1e76be230 100644 --- a/logos_delivery/waku/waku_peer_exchange/protocol.nim +++ b/logos_delivery/waku/waku_peer_exchange/protocol.nim @@ -1,6 +1,5 @@ -import logos_delivery/waku/compat/option_valueor import - std/[options, sequtils, random], + std/[sequtils, random], results, chronicles, chronos, @@ -33,7 +32,7 @@ logScope: type WakuPeerExchange* = ref object of LPProtocol peerManager*: PeerManager - cluster*: Option[uint16] + cluster*: Opt[uint16] # todo: next step: ring buffer; future: implement cache satisfying https://rfc.vac.dev/spec/34/ requestRateLimiter*: RequestRateLimiter @@ -52,7 +51,7 @@ proc respond( return err( ( status_code: PeerExchangeResponseStatusCode.DIAL_FAILURE, - status_desc: some("stream closed before response: " & exc.msg), + status_desc: Opt.some("stream closed before response: " & exc.msg), ) ) @@ -61,7 +60,7 @@ proc respond( proc respondError( wpx: WakuPeerExchange, status_code: PeerExchangeResponseStatusCode, - status_desc: Option[string], + status_desc: Opt[string], conn: Connection, ): Future[WakuPeerExchangeResult[void]] {.async: (raises: [CancelledError]), gcsafe.} = let rpc = PeerExchangeRpc.makeErrorResponse(status_code, status_desc) @@ -76,14 +75,14 @@ proc respondError( return err( ( status_code: PeerExchangeResponseStatusCode.SERVICE_UNAVAILABLE, - status_desc: some("stream closed before response: " & exc.msg), + status_desc: Opt.some("stream closed before response: " & exc.msg), ) ) return ok() proc poolFilter*( - cluster: Option[uint16], origin: PeerOrigin, enr: enr.Record + cluster: Opt[uint16], origin: PeerOrigin, enr: enr.Record ): Result[void, string] = if origin != Discv5: trace "peer not from discv5", origin = $origin @@ -93,7 +92,7 @@ proc poolFilter*( return err("peer has mismatching cluster") return ok() -proc poolFilter*(cluster: Option[uint16], peer: RemotePeerInfo): Result[void, string] = +proc poolFilter*(cluster: Opt[uint16], peer: RemotePeerInfo): Result[void, string] = if peer.enr.isNone(): info "peer has no ENR", peer = $peer return err("peer has no ENR: " & $peer) @@ -147,7 +146,7 @@ proc initProtocolHandler(wpx: WakuPeerExchange) = ( await wpx.respondError( - PeerExchangeResponseStatusCode.BAD_REQUEST, some($error), conn + PeerExchangeResponseStatusCode.BAD_REQUEST, Opt.some($error), conn ) ).isOkOr: error "Failed to respond with BAD_REQUEST", error = $error @@ -166,7 +165,7 @@ proc initProtocolHandler(wpx: WakuPeerExchange) = ( await wpx.respondError( - PeerExchangeResponseStatusCode.TOO_MANY_REQUESTS, none(string), conn + PeerExchangeResponseStatusCode.TOO_MANY_REQUESTS, Opt.none(string), conn ) ).isOkOr: error "Failed to respond with TOO_MANY_REQUESTS", error = $error @@ -177,8 +176,8 @@ proc initProtocolHandler(wpx: WakuPeerExchange) = proc new*( T: type WakuPeerExchange, peerManager: PeerManager, - cluster: Option[uint16] = none(uint16), - rateLimitSetting: Option[RateLimitSetting] = none[RateLimitSetting](), + cluster: Opt[uint16] = Opt.none(uint16), + rateLimitSetting: Opt[RateLimitSetting] = Opt.none(RateLimitSetting), ): T = let wpx = WakuPeerExchange( peerManager: peerManager, diff --git a/logos_delivery/waku/waku_peer_exchange/rpc.nim b/logos_delivery/waku/waku_peer_exchange/rpc.nim index 4a91e8db1..b2cd41000 100644 --- a/logos_delivery/waku/waku_peer_exchange/rpc.nim +++ b/logos_delivery/waku/waku_peer_exchange/rpc.nim @@ -1,4 +1,4 @@ -import std/options +import results type PeerExchangeResponseStatusCode* {.pure.} = enum @@ -19,10 +19,10 @@ type PeerExchangeResponse* = object peerInfos*: seq[PeerExchangePeerInfo] status_code*: PeerExchangeResponseStatusCode - status_desc*: Option[string] + status_desc*: Opt[string] PeerExchangeResponseStatus* = - tuple[status_code: PeerExchangeResponseStatusCode, status_desc: Option[string]] + tuple[status_code: PeerExchangeResponseStatusCode, status_desc: Opt[string]] PeerExchangeRpc* = object request*: PeerExchangeRequest @@ -41,7 +41,7 @@ proc makeResponse*(T: type PeerExchangeRpc, peerInfos: seq[PeerExchangePeerInfo] proc makeErrorResponse*( T: type PeerExchangeRpc, status_code: PeerExchangeResponseStatusCode, - status_desc: Option[string] = none(string), + status_desc: Opt[string] = Opt.none(string), ): T = return T( response: PeerExchangeResponse(status_code: status_code, status_desc: status_desc) diff --git a/logos_delivery/waku/waku_peer_exchange/rpc_codec.nim b/logos_delivery/waku/waku_peer_exchange/rpc_codec.nim index e6eaa0ca2..00aefd275 100644 --- a/logos_delivery/waku/waku_peer_exchange/rpc_codec.nim +++ b/logos_delivery/waku/waku_peer_exchange/rpc_codec.nim @@ -1,7 +1,6 @@ {.push raises: [].} -import std/options -import ../common/protobuf, ./rpc +import results, ../common/protobuf, ./rpc proc encode*(rpc: PeerExchangeRequest): ProtoBuffer = var pb = initProtoBuffer() @@ -79,9 +78,9 @@ proc decode*(T: type PeerExchangeResponse, buffer: seq[byte]): ProtobufResult[T] var status_desc: string if ?pb.getField(11, status_desc): - rpc.status_desc = some(status_desc) + rpc.status_desc = Opt.some(status_desc) else: - rpc.status_desc = none(string) + rpc.status_desc = Opt.none(string) ok(rpc) diff --git a/logos_delivery/waku/waku_relay/protocol.nim b/logos_delivery/waku/waku_relay/protocol.nim index 409b02929..0997a1fd8 100644 --- a/logos_delivery/waku/waku_relay/protocol.nim +++ b/logos_delivery/waku/waku_relay/protocol.nim @@ -1,4 +1,3 @@ -import logos_delivery/waku/compat/option_valueor ## Waku Relay module. Thin layer on top of GossipSub. ## ## See https://github.com/vacp2p/specs/blob/master/specs/waku/v2/waku-relay.md diff --git a/logos_delivery/waku/waku_rendezvous/client.nim b/logos_delivery/waku/waku_rendezvous/client.nim index c4aada9e6..c23c0ae9a 100644 --- a/logos_delivery/waku/waku_rendezvous/client.nim +++ b/logos_delivery/waku/waku_rendezvous/client.nim @@ -1,8 +1,7 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} import - std/[options, sequtils, tables], + std/[sequtils, tables], results, chronos, chronicles, @@ -68,7 +67,7 @@ proc requestAll*( let rInfo = RemotePeerInfo.init( record.peerId, record.addresses, - mixPubKey = some(intoCurve25519Key(fromHex(record.mixKey))), + mixPubKey = Opt.some(intoCurve25519Key(fromHex(record.mixKey))), ) self.peerManager.addPeer(rInfo) diff --git a/logos_delivery/waku/waku_rendezvous/common.nim b/logos_delivery/waku/waku_rendezvous/common.nim index 9776fd3a7..bca45dece 100644 --- a/logos_delivery/waku/waku_rendezvous/common.nim +++ b/logos_delivery/waku/waku_rendezvous/common.nim @@ -1,7 +1,6 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} -import std/options, chronos +import results, chronos import ../common/enr, ../waku_enr/capabilities, ../waku_enr/sharding @@ -40,8 +39,8 @@ proc computeNamespace*(clusterId: uint16, shard: uint16, cap: Capabilities): str return namespace -proc getRelayShards*(enr: enr.Record): Option[RelayShards] = +proc getRelayShards*(enr: enr.Record): Opt[RelayShards] = let typedRecord = enr.toTyped().valueOr: - return none(RelayShards) + return Opt.none(RelayShards) return typedRecord.relaySharding() diff --git a/logos_delivery/waku/waku_rendezvous/protocol.nim b/logos_delivery/waku/waku_rendezvous/protocol.nim index 253fa5a12..1fe72c803 100644 --- a/logos_delivery/waku/waku_rendezvous/protocol.nim +++ b/logos_delivery/waku/waku_rendezvous/protocol.nim @@ -1,8 +1,7 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} import - std/[sugar, options, sequtils, tables], + std/[sugar, sequtils, tables], results, chronos, chronicles, diff --git a/logos_delivery/waku/waku_store/client.nim b/logos_delivery/waku/waku_store/client.nim index 21e2699e3..82b7f4c43 100644 --- a/logos_delivery/waku/waku_store/client.nim +++ b/logos_delivery/waku/waku_store/client.nim @@ -1,9 +1,8 @@ import libp2p/crypto/crypto -import logos_delivery/waku/compat/option_valueor {.push raises: [].} import - std/[options, tables, sequtils, algorithm, random], + std/[tables, sequtils, algorithm, random], results, chronicles, chronos, @@ -89,7 +88,7 @@ proc query*( return await self.sendStoreRequest(request, connection) proc queryToAny*( - self: WakuStoreClient, request: StoreQueryRequest, peerId = none(PeerId) + self: WakuStoreClient, request: StoreQueryRequest, peerId = Opt.none(PeerId) ): Future[StoreQueryResult] {.async.} = ## we don't specify a particular peer and instead we get it from peer manager. ## It will retry with different store peers if the dial fails. diff --git a/logos_delivery/waku/waku_store/common.nim b/logos_delivery/waku/waku_store/common.nim index 70446be4b..482550e14 100644 --- a/logos_delivery/waku/waku_store/common.nim +++ b/logos_delivery/waku/waku_store/common.nim @@ -1,6 +1,6 @@ {.push raises: [].} -import std/[options, sequtils], results, stew/byteutils +import std/sequtils, results, stew/byteutils import ../waku_core, ../common/paging from ../waku_core/codecs import WakuStoreCodec @@ -22,21 +22,21 @@ type requestId*: string includeData*: bool - pubsubTopic*: Option[PubsubTopic] + pubsubTopic*: Opt[PubsubTopic] contentTopics*: seq[ContentTopic] - startTime*: Option[Timestamp] - endTime*: Option[Timestamp] + startTime*: Opt[Timestamp] + endTime*: Opt[Timestamp] messageHashes*: seq[WakuMessageHash] - paginationCursor*: Option[WakuMessageHash] + paginationCursor*: Opt[WakuMessageHash] paginationForward*: PagingDirection - paginationLimit*: Option[uint64] + paginationLimit*: Opt[uint64] WakuMessageKeyValue* = object messageHash*: WakuMessageHash - message*: Option[WakuMessage] - pubsubTopic*: Option[PubsubTopic] + message*: Opt[WakuMessage] + pubsubTopic*: Opt[PubsubTopic] StoreQueryResponse* = object requestId*: string @@ -46,13 +46,13 @@ type messages*: seq[WakuMessageKeyValue] - paginationCursor*: Option[WakuMessageHash] + paginationCursor*: Opt[WakuMessageHash] # Types to be used by clients that use the hash in hex WakuMessageKeyValueHex* = object messageHash*: string - message*: Option[WakuMessage] - pubsubTopic*: Option[PubsubTopic] + message*: Opt[WakuMessage] + pubsubTopic*: Opt[PubsubTopic] StoreQueryResponseHex* = object requestId*: string @@ -62,7 +62,7 @@ type messages*: seq[WakuMessageKeyValueHex] - paginationCursor*: Option[string] + paginationCursor*: Opt[string] StatusCode* {.pure.} = enum UNKNOWN = uint32(000) @@ -150,7 +150,7 @@ proc toHex*(response: StoreQueryResponse): StoreQueryResponseHex = messages: response.messages.mapIt(it.toHex()), # Convert each message to hex paginationCursor: if response.paginationCursor.isSome: - some(response.paginationCursor.get().to0xHex()) + Opt.some(response.paginationCursor.get().to0xHex()) else: - none[string](), + Opt.none(string), ) diff --git a/logos_delivery/waku/waku_store/protocol.nim b/logos_delivery/waku/waku_store/protocol.nim index d09532d43..bf34bb615 100644 --- a/logos_delivery/waku/waku_store/protocol.nim +++ b/logos_delivery/waku/waku_store/protocol.nim @@ -1,11 +1,10 @@ -import logos_delivery/waku/compat/option_valueor ## Waku Store protocol for historical messaging support. ## See spec for more details: ## https://github.com/vacp2p/specs/blob/master/specs/waku/v2/waku-store.md {.push raises: [].} import - std/[options, times], + std/times, results, chronicles, chronos, @@ -159,9 +158,9 @@ proc new*( peerManager: PeerManager, rng: crypto.Rng, requestHandler: StoreQueryRequestHandler, - rateLimitSetting: Option[RateLimitSetting] = none[RateLimitSetting](), + rateLimitSetting: Opt[RateLimitSetting] = Opt.none(RateLimitSetting), ): T = - if requestHandler.isNil(): # TODO use an Option instead ??? + if requestHandler.isNil(): # TODO use an Opt instead ??? raise newException(NilAccessDefect, "history query handler is nil") let store = WakuStore( diff --git a/logos_delivery/waku/waku_store/resume.nim b/logos_delivery/waku/waku_store/resume.nim index 9350bf6b7..0f45b8a6b 100644 --- a/logos_delivery/waku/waku_store/resume.nim +++ b/logos_delivery/waku/waku_store/resume.nim @@ -1,8 +1,7 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} import - std/options, + results, sqlite3_abi, chronicles, chronos, @@ -39,7 +38,7 @@ type db: SqliteDatabase replaceStmt: SqliteStmt[(Timestamp), void] - transferCallBack: Option[TransferCallback] + transferCallBack: Opt[TransferCallback] peerManager: PeerManager @@ -79,15 +78,15 @@ proc initTransferHandler( return # tying archive, store client and resume into one callback and saving it for later - self.transferCallBack = some( + self.transferCallBack = Opt.some( proc( timestamp: Timestamp, peer: RemotePeerInfo ): Future[Result[void, string]] {.async: (raises: []), closure.} = var req = StoreQueryRequest() req.includeData = true - req.startTime = some(timestamp) - req.endTime = some(getNowInNanosecondTime()) - req.paginationLimit = some(uint64(100)) + req.startTime = Opt.some(timestamp) + req.endTime = Opt.some(getNowInNanosecondTime()) + req.paginationLimit = Opt.some(uint64(100)) while true: let catchable = catch: diff --git a/logos_delivery/waku/waku_store/rpc_codec.nim b/logos_delivery/waku/waku_store/rpc_codec.nim index a5e5e2d0b..2dbb890cd 100644 --- a/logos_delivery/waku/waku_store/rpc_codec.nim +++ b/logos_delivery/waku/waku_store/rpc_codec.nim @@ -1,6 +1,6 @@ {.push raises: [].} -import std/options, stew/arrayops +import results, stew/arrayops import ../common/[protobuf, paging], ../waku_core, ./common const DefaultMaxRpcSize* = -1 @@ -61,9 +61,9 @@ proc decode*( var pubsubTopic: string if not ?pb.getField(10, pubsubTopic): - req.pubsubTopic = none(string) + req.pubsubTopic = Opt.none(string) else: - req.pubsubTopic = some(pubsubTopic) + req.pubsubTopic = Opt.some(pubsubTopic) var topics: seq[string] if not ?pb.getRepeatedField(11, topics): @@ -73,15 +73,15 @@ proc decode*( var start: zint64 if not ?pb.getField(12, start): - req.startTime = none(Timestamp) + req.startTime = Opt.none(Timestamp) else: - req.startTime = some(Timestamp(int64(start))) + req.startTime = Opt.some(Timestamp(int64(start))) var endTime: zint64 if not ?pb.getField(13, endTime): - req.endTime = none(Timestamp) + req.endTime = Opt.none(Timestamp) else: - req.endTime = some(Timestamp(int64(endTime))) + req.endTime = Opt.some(Timestamp(int64(endTime))) var buffer: seq[seq[byte]] if not ?pb.getRepeatedField(20, buffer): @@ -95,11 +95,11 @@ proc decode*( var cursor: seq[byte] if not ?pb.getField(51, cursor): - req.paginationCursor = none(WakuMessageHash) + req.paginationCursor = Opt.none(WakuMessageHash) else: var hash: WakuMessageHash discard copyFrom[byte](hash, cursor) - req.paginationCursor = some(hash) + req.paginationCursor = Opt.some(hash) var paging: uint32 if not ?pb.getField(52, paging): @@ -109,9 +109,9 @@ proc decode*( var limit: uint64 if not ?pb.getField(53, limit): - req.paginationLimit = none(uint64) + req.paginationLimit = Opt.none(uint64) else: - req.paginationLimit = some(limit) + req.paginationLimit = Opt.some(limit) return ok(req) @@ -164,11 +164,11 @@ proc decode*( var proto: ProtoBuffer var topic: string if ?pb.getField(2, proto) and ?pb.getField(3, topic): - keyValue.message = some(?WakuMessage.decode(proto.buffer)) - keyValue.pubsubTopic = some(topic) + keyValue.message = Opt.some(?WakuMessage.decode(proto.buffer)) + keyValue.pubsubTopic = Opt.some(topic) else: - keyValue.message = none(WakuMessage) - keyValue.pubsubTopic = none(string) + keyValue.message = Opt.none(WakuMessage) + keyValue.pubsubTopic = Opt.none(string) return ok(keyValue) @@ -204,10 +204,10 @@ proc decode*( var cursor: seq[byte] if not ?pb.getField(51, cursor): - res.paginationCursor = none(WakuMessageHash) + res.paginationCursor = Opt.none(WakuMessageHash) else: var hash: WakuMessageHash discard copyFrom[byte](hash, cursor) - res.paginationCursor = some(hash) + res.paginationCursor = Opt.some(hash) return ok(res) diff --git a/logos_delivery/waku/waku_store/self_req_handler.nim b/logos_delivery/waku/waku_store/self_req_handler.nim index acd933724..315961307 100644 --- a/logos_delivery/waku/waku_store/self_req_handler.nim +++ b/logos_delivery/waku/waku_store/self_req_handler.nim @@ -1,4 +1,3 @@ -import logos_delivery/waku/compat/option_valueor ## ## This file is aimed to attend the requests that come directly ## from the 'self' node. It is expected to attend the store requests that diff --git a/logos_delivery/waku/waku_store_sync/common.nim b/logos_delivery/waku/waku_store_sync/common.nim index da8a5df95..1c718d726 100644 --- a/logos_delivery/waku/waku_store_sync/common.nim +++ b/logos_delivery/waku/waku_store_sync/common.nim @@ -1,6 +1,6 @@ {.push raises: [].} -import std/[options], chronos, stew/[byteutils] +import chronos, stew/[byteutils] import ../waku_core diff --git a/logos_delivery/waku/waku_store_sync/reconciliation.nim b/logos_delivery/waku/waku_store_sync/reconciliation.nim index 6f301d633..db3574a5e 100644 --- a/logos_delivery/waku/waku_store_sync/reconciliation.nim +++ b/logos_delivery/waku/waku_store_sync/reconciliation.nim @@ -1,8 +1,7 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} import - std/[sequtils, options, sets], + std/[sequtils, sets], stew/byteutils, results, chronicles, @@ -110,9 +109,7 @@ proc messageIngress*( error "failed to insert new message", msg_hash = byteutils.toHex(id.hash), error = $error -proc preProcessPayload( - self: SyncReconciliation, payload: RangesData -): Option[RangesData] = +proc preProcessPayload(self: SyncReconciliation, payload: RangesData): Opt[RangesData] = ## Check the received payload for topics and/or time mismatch. var payload = payload @@ -122,7 +119,7 @@ proc preProcessPayload( let pubsubIntersection = self.pubsubTopics * payload.pubsubTopics.toHashSet() if pubsubIntersection.len < 1: - return none(RangesData) + return Opt.none(RangesData) payload.pubsubTopics = pubsubIntersection.toSeq() elif self.pubsubTopics.len > 0: @@ -133,7 +130,7 @@ proc preProcessPayload( let contentIntersection = self.contentTopics * payload.contentTopics.toHashSet() if contentIntersection.len < 1: - return none(RangesData) + return Opt.none(RangesData) payload.contentTopics = contentIntersection.toSeq() elif self.contentTopics.len > 0: @@ -160,7 +157,7 @@ proc preProcessPayload( else: break - return some(payload) + return Opt.some(payload) proc processRequest( self: SyncReconciliation, conn: Connection @@ -304,7 +301,7 @@ proc initiate( proc storeSynchronization*( self: SyncReconciliation, - peerInfo: Option[RemotePeerInfo] = none(RemotePeerInfo), + peerInfo: Opt[RemotePeerInfo] = Opt.none(RemotePeerInfo), offset: Duration = self.relayJitter, syncRange: Duration = self.syncRange, pubsubTopics: HashSet[PubsubTopic] = self.pubsubTopics, @@ -348,9 +345,9 @@ proc initFillStorage( var query = ArchiveQuery( includeData: true, - cursor: none(ArchiveCursor), - startTime: some(starTime), - endTime: some(endTime), + cursor: Opt.none(ArchiveCursor), + startTime: Opt.some(starTime), + endTime: Opt.some(endTime), pageSize: 100, direction: PagingDirection.FORWARD, ) diff --git a/logos_delivery/waku/waku_store_sync/storage/seq_storage.nim b/logos_delivery/waku/waku_store_sync/storage/seq_storage.nim index 272b3a78a..7f9d3b46d 100644 --- a/logos_delivery/waku/waku_store_sync/storage/seq_storage.nim +++ b/logos_delivery/waku/waku_store_sync/storage/seq_storage.nim @@ -1,5 +1,5 @@ import - std/[algorithm, sequtils, math, options, tables, packedsets, sugar], + std/[algorithm, sequtils, math, tables, packedsets, sugar], results, chronos, stew/arrayops @@ -167,7 +167,7 @@ method prune*(self: SeqStorage, timestamp: Timestamp): int {.raises: [].} = proc computefingerprintFromSlice( self: SeqStorage, - sliceOpt: Option[Slice[int]], + sliceOpt: Opt[Slice[int]], pubsubTopicSet: PackedSet[int], contentTopicSet: PackedSet[int], ): Fingerprint = @@ -199,7 +199,7 @@ proc computefingerprintFromSlice( return fingerprint -proc findIdxBounds(self: SeqStorage, slice: Slice[SyncID]): Option[Slice[int]] = +proc findIdxBounds(self: SeqStorage, slice: Slice[SyncID]): Opt[Slice[int]] = ## Given bounds find the corresponding indices in this storage let lower = self.elements.lowerBound(slice.a, common.cmp) @@ -207,13 +207,13 @@ proc findIdxBounds(self: SeqStorage, slice: Slice[SyncID]): Option[Slice[int]] = if upper < 1: # entire range is before any of our elements - return none(Slice[int]) + return Opt.none(Slice[int]) if lower >= self.elements.len: # entire range is after any of our elements - return none(Slice[int]) + return Opt.none(Slice[int]) - return some(lower ..< upper) + return Opt.some(lower ..< upper) method computeFingerprint*( self: SeqStorage, @@ -308,7 +308,7 @@ proc processFingerprintRange*( continue let fingerprint = - self.computeFingerprintFromSlice(some(slice), pubsubTopicSet, contentTopicSet) + self.computeFingerprintFromSlice(Opt.some(slice), pubsubTopicSet, contentTopicSet) output.ranges.add((partitionBounds, RangeType.Fingerprint)) output.fingerprints.add(fingerprint) continue diff --git a/logos_delivery/waku/waku_store_sync/transfer.nim b/logos_delivery/waku/waku_store_sync/transfer.nim index aa02adfdc..5d20afb18 100644 --- a/logos_delivery/waku/waku_store_sync/transfer.nim +++ b/logos_delivery/waku/waku_store_sync/transfer.nim @@ -1,4 +1,3 @@ -import logos_delivery/waku/compat/option_valueor {.push raises: [].} import diff --git a/tests/api/test_api_health.nim b/tests/api/test_api_health.nim index 7b493964a..9b4c3d067 100644 --- a/tests/api/test_api_health.nim +++ b/tests/api/test_api_health.nim @@ -1,6 +1,6 @@ {.used.} -import std/[options, sequtils, times] +import results, std/[sequtils, times] import chronos, testutils/unittests, stew/byteutils, libp2p/[switch, peerinfo] import brokers/broker_context import ../testlib/[common, wakucore, wakunode, testasync] @@ -96,7 +96,7 @@ suite "LM API health checking": conf.listenAddress = parseIpAddress("0.0.0.0") conf.tcpPort = Port(0) conf.discv5UdpPort = Port(0) - conf.clusterId = some(3'u16) + conf.clusterId = Opt.some(3'u16) conf.numShardsInNetwork = 1 conf.rest = false @@ -241,7 +241,7 @@ suite "LM API health checking": let cTopic = ContentTopic("/waku/2/my-content-topic/proto") let shardReq = - RequestRelayShard.request(client.waku.brokerCtx, none(PubsubTopic), cTopic) + RequestRelayShard.request(client.waku.brokerCtx, Opt.none(PubsubTopic), cTopic) check shardReq.isOk() let targetShard = $shardReq.get().relayShard @@ -276,7 +276,7 @@ suite "LM API health checking": edgeConf.listenAddress = parseIpAddress("0.0.0.0") edgeConf.tcpPort = Port(0) edgeConf.discv5UdpPort = Port(0) - edgeConf.clusterId = some(3'u16) + edgeConf.clusterId = Opt.some(3'u16) edgeConf.maxMessageSize = "150 KiB" edgeConf.rest = false diff --git a/tests/api/test_api_receive.nim b/tests/api/test_api_receive.nim index 870f85860..556ec6431 100644 --- a/tests/api/test_api_receive.nim +++ b/tests/api/test_api_receive.nim @@ -1,6 +1,6 @@ {.used.} -import std/[options, sequtils, net, sets] +import results, std/[sequtils, net, sets] import chronos, testutils/unittests, stew/byteutils import libp2p/[peerid, peerinfo, crypto/crypto] import brokers/broker_context @@ -89,7 +89,7 @@ proc createApiNodeConf(numShards: uint16 = 1): WakuNodeConf = conf.listenAddress = parseIpAddress("0.0.0.0") conf.tcpPort = Port(0) conf.discv5UdpPort = Port(0) - conf.clusterId = some(3'u16) + conf.clusterId = Opt.some(3'u16) conf.numShardsInNetwork = numShards conf.rest = false result = conf @@ -168,14 +168,14 @@ proc setupNetwork(testTopic: ContentTopic): Future[TestNetwork] {.async.} = let missedMsg = WakuMessage( payload: missedPayload, contentTopic: testTopic, version: 0, timestamp: now() ) - discard (await publisher.publish(some(shard), missedMsg)).expect( + discard (await publisher.publish(Opt.some(shard), missedMsg)).expect( "Publish missed msg failed" ) block waitArchive: for _ in 0 ..< 50: let query = archive_common.ArchiveQuery( - includeData: false, contentTopics: @[testTopic], pubsubTopic: some(shard) + includeData: false, contentTopics: @[testTopic], pubsubTopic: Opt.some(shard) ) let res = await storeNode.wakuArchive.findMessages(query) if res.isOk() and res.get().hashes.len > 0: diff --git a/tests/api/test_api_send.nim b/tests/api/test_api_send.nim index 8df564b0d..6470b0168 100644 --- a/tests/api/test_api_send.nim +++ b/tests/api/test_api_send.nim @@ -1,6 +1,6 @@ {.used.} -import std/strutils +import results, std/strutils import chronos, testutils/unittests, stew/byteutils, libp2p/[switch, peerinfo] import brokers/broker_context import ../testlib/[common, wakucore, wakunode, testasync] @@ -128,7 +128,7 @@ proc createApiNodeConf( conf.listenAddress = parseIpAddress("0.0.0.0") conf.tcpPort = Port(0) conf.discv5UdpPort = Port(0) - conf.clusterId = some(3'u16) + conf.clusterId = Opt.some(3'u16) conf.numShardsInNetwork = 1 conf.rest = false result = conf diff --git a/tests/api/test_api_subscription.nim b/tests/api/test_api_subscription.nim index 90d160bc3..7558cd73e 100644 --- a/tests/api/test_api_subscription.nim +++ b/tests/api/test_api_subscription.nim @@ -1,6 +1,6 @@ {.used.} -import std/[strutils, sequtils, net, options, sets, tables] +import results, std/[strutils, sequtils, net, sets, tables] import chronos, testutils/unittests, stew/byteutils import libp2p/[peerid, peerinfo, multiaddress, crypto/crypto] import brokers/broker_context @@ -77,7 +77,7 @@ proc createApiNodeConf( conf.listenAddress = parseIpAddress("0.0.0.0") conf.tcpPort = Port(0) conf.discv5UdpPort = Port(0) - conf.clusterId = some(3'u16) + conf.clusterId = Opt.some(3'u16) conf.numShardsInNetwork = numShards conf.rest = false result = conf @@ -205,7 +205,7 @@ proc publishToMesh( let msg = WakuMessage( payload: payload, contentTopic: contentTopic, version: 0, timestamp: now() ) - return await net.publisher.publish(some(shard), msg) + return await net.publisher.publish(Opt.some(shard), msg) proc publishToMeshAfterEdgeReady( net: TestNetwork, contentTopic: ContentTopic, payload: seq[byte] @@ -688,7 +688,7 @@ suite "Messaging API, SubscriptionManager": version: 0, timestamp: now(), ) - discard (await publisher.publish(some(shard), msg1)).expect("Publish 1 failed") + discard (await publisher.publish(Opt.some(shard), msg1)).expect("Publish 1 failed") require await eventManager.waitForEvents(TestTimeout) check eventManager.receivedMessages[0].payload == "Before failover".toBytes() @@ -709,7 +709,7 @@ suite "Messaging API, SubscriptionManager": version: 0, timestamp: now(), ) - discard (await publisher.publish(some(shard), msg2)).expect("Publish 2 failed") + discard (await publisher.publish(Opt.some(shard), msg2)).expect("Publish 2 failed") require await eventManager.waitForEvents(TestTimeout) check eventManager.receivedMessages[0].payload == "After failover".toBytes() @@ -822,7 +822,7 @@ suite "Messaging API, SubscriptionManager": version: 0, timestamp: now(), ) - discard (await publisher.publish(some(shard), msg)).expect("Publish failed") + discard (await publisher.publish(Opt.some(shard), msg)).expect("Publish failed") require await eventManager.waitForEvents(TestTimeout) check eventManager.receivedMessages[0].payload == "After replacement".toBytes() diff --git a/tests/api/test_conf.nim b/tests/api/test_conf.nim index 705c00825..06a115897 100644 --- a/tests/api/test_conf.nim +++ b/tests/api/test_conf.nim @@ -1,6 +1,6 @@ {.used.} -import std/[options, net], results, chronos, testutils/unittests +import std/net, results, chronos, testutils/unittests import brokers/broker_context import logos_delivery import logos_delivery/api/conf/logos_delivery_conf_json @@ -15,7 +15,7 @@ suite "MessagingClientConf - mode expansion (toWakuNodeConf)": kc.relay == true kc.filter == true kc.lightpush == true - kc.discv5Discovery == some(true) + kc.discv5Discovery == Opt.some(true) kc.peerExchange == true kc.rendezvous == true @@ -28,19 +28,20 @@ suite "MessagingClientConf - mode expansion (toWakuNodeConf)": kc.lightpush == false kc.store == false kc.peerExchange == true - kc.discv5Discovery == some(true) # discovery stays on; mode does not force it off + kc.discv5Discovery == Opt.some(true) + # discovery stays on; mode does not force it off suite "MessagingClientConf - field mapping + transport policy": test "set fields are written to their kernel counterparts": let mc = MessagingClientConf( - clusterId: some(3'u16), - numShardsInCluster: some(4'u16), - maxMessageSize: some("150KiB"), + clusterId: Opt.some(3'u16), + numShardsInCluster: Opt.some(4'u16), + maxMessageSize: Opt.some("150KiB"), ) let kc = mc.toWakuNodeConf(LogosDeliveryMode.Core).valueOr: raiseAssert error check: - kc.clusterId == some(3'u16) + kc.clusterId == Opt.some(3'u16) kc.numShardsInNetwork == 4 kc.maxMessageSize == "150KiB" @@ -55,9 +56,9 @@ suite "MessagingClientConf - field mapping + transport policy": test "explicit transport overrides win": let mc = MessagingClientConf( - p2pTcpPort: some(Port(1234)), - websocketSupport: some(true), - quicSupport: some(false), + p2pTcpPort: Opt.some(Port(1234)), + websocketSupport: Opt.some(true), + quicSupport: Opt.some(false), ) let kc = mc.toWakuNodeConf(LogosDeliveryMode.Core).valueOr: raiseAssert error @@ -90,7 +91,8 @@ suite "MessagingClientConf - preset resolution": test "a messaging override of a kernel-mirrored field wins over the preset": let presetConf = resolvePreset("logos.dev").valueOr: raiseAssert error - let merged = merge(presetConf, MessagingClientConf(numShardsInCluster: some(1'u16))) + let merged = + merge(presetConf, MessagingClientConf(numShardsInCluster: Opt.some(1'u16))) var kernelConf = toWakuNodeConf(merged, LogosDeliveryMode.Core).valueOr: raiseAssert error kernelConf.preset = "logos.dev" @@ -102,12 +104,13 @@ suite "MessagingClientConf - preset resolution": suite "MessagingClientConf - merge (override wins)": test "a set override field wins; unset keeps the base": - let base = MessagingClientConf(clusterId: some(1'u16), maxMessageSize: some("1MB")) - let overrides = MessagingClientConf(clusterId: some(2'u16)) + let base = + MessagingClientConf(clusterId: Opt.some(1'u16), maxMessageSize: Opt.some("1MB")) + let overrides = MessagingClientConf(clusterId: Opt.some(2'u16)) let mc = merge(base, overrides) check: - mc.clusterId == some(2'u16) # override wins - mc.maxMessageSize == some("1MB") # base preserved + mc.clusterId == Opt.some(2'u16) # override wins + mc.maxMessageSize == Opt.some("1MB") # base preserved suite "parseLogosDeliveryConf - JSON parsing": test "empty object resolves to a full Core node conf": @@ -134,8 +137,8 @@ suite "parseLogosDeliveryConf - JSON parsing": raiseAssert error require lc.messagingConf.isSome() check: - WakuNodeConf(lc.kernelConf).clusterId == some(7'u16) # kernel field - lc.messagingConf.get().reliabilityEnabled == some(true) # messaging-only + WakuNodeConf(lc.kernelConf).clusterId == Opt.some(7'u16) # kernel field + lc.messagingConf.get().reliabilityEnabled == Opt.some(true) # messaging-only test "messaging overrides are recorded verbatim, unset fields left none": let lc = parseLogosDeliveryConf("""{"messagingOverrides": {"clusterId": 7}}""").valueOr: @@ -143,7 +146,7 @@ suite "parseLogosDeliveryConf - JSON parsing": require lc.messagingConf.isSome() let overrides = lc.messagingConf.get() check: - overrides.clusterId == some(7'u16) # the user's override, kept as given + overrides.clusterId == Opt.some(7'u16) # the user's override, kept as given overrides.reliabilityEnabled.isNone() # user didn't set it, so it stays none test "a preset resolves reliability into the messaging record": @@ -161,8 +164,8 @@ suite "parseLogosDeliveryConf - JSON parsing": require lc.channelsConf.isSome() let channels = lc.channelsConf.get() check: - channels.rateLimitEnabled == some(true) - channels.sdsMaxRetransmissions == some(9) + channels.rateLimitEnabled == Opt.some(true) + channels.sdsMaxRetransmissions == Opt.some(9) test "invalid mode is rejected (Core or Edge only)": check parseLogosDeliveryConf("""{"mode": "bogus"}""").isErr() @@ -185,8 +188,8 @@ suite "parseLogosDeliveryConf - JSON parsing": let kc = WakuNodeConf(lc.kernelConf) require lc.messagingConf.isSome() check: - kc.clusterId == some(7'u16) - lc.messagingConf.get().reliabilityEnabled == some(true) # messaging-only + kc.clusterId == Opt.some(7'u16) + lc.messagingConf.get().reliabilityEnabled == Opt.some(true) # messaging-only kc.tcpPort == Port(1234) test "unknown keys inside an overrides body are rejected": @@ -217,7 +220,7 @@ suite "parseLogosDeliveryConf - JSON parsing": raiseAssert error let kc = WakuNodeConf(lc.kernelConf) check: - kc.clusterId == some(7'u16) + kc.clusterId == Opt.some(7'u16) kc.store == false # null left store unset; Core does not enable it test "an invalid Ethereum RPC URL is rejected at parse time": @@ -285,10 +288,10 @@ suite "LogosDelivery.new - construction (the app-dev entry)": LogosDeliveryMode.Core, "", MessagingClientConf( - clusterId: some(3'u16), - numShardsInCluster: some(1'u16), - listenIpv4: some(parseIpAddress("0.0.0.0")), - reliabilityEnabled: some(true), + clusterId: Opt.some(3'u16), + numShardsInCluster: Opt.some(1'u16), + listenIpv4: Opt.some(parseIpAddress("0.0.0.0")), + reliabilityEnabled: Opt.some(true), ), ) ).valueOr: @@ -306,7 +309,7 @@ suite "LogosDelivery.new - construction (the app-dev entry)": await LogosDelivery.new( LogosDeliveryMode.Core, "logostest", - MessagingClientConf(listenIpv4: some(parseIpAddress("0.0.0.0"))), + MessagingClientConf(listenIpv4: Opt.some(parseIpAddress("0.0.0.0"))), ) ).valueOr: raiseAssert error @@ -315,7 +318,7 @@ suite "LogosDelivery.new - construction (the app-dev entry)": suite "MessagingClientConf - store override": test "store opt-in overrides the mode default; protocol flags follow the mode": - let kc = MessagingClientConf(store: some(true)).toWakuNodeConf( + let kc = MessagingClientConf(store: Opt.some(true)).toWakuNodeConf( LogosDeliveryMode.Edge ).valueOr: raiseAssert error @@ -325,7 +328,7 @@ suite "MessagingClientConf - store override": suite "LogosDelivery.new - raw kernel construction": asyncTest "a fleet node mounts the kernel only; start/stop tolerate the nil layers": - let kernel = MessagingClientConf(listenIpv4: some(parseIpAddress("0.0.0.0"))).toWakuNodeConf( + let kernel = MessagingClientConf(listenIpv4: Opt.some(parseIpAddress("0.0.0.0"))).toWakuNodeConf( LogosDeliveryMode.Core ).valueOr: raiseAssert error @@ -351,7 +354,7 @@ suite "parseLogosDeliveryConf - flat WakuNodeConf shape (interop compatibility)" raiseAssert error check: WakuNodeConf(lc.kernelConf).relay == true - WakuNodeConf(lc.kernelConf).clusterId == some(7'u16) + WakuNodeConf(lc.kernelConf).clusterId == Opt.some(7'u16) lc.messagingConf.isSome() # full stack lc.channelsConf.isSome() @@ -364,13 +367,13 @@ suite "parseLogosDeliveryConf - flat WakuNodeConf shape (interop compatibility)" WakuNodeConf(lc.kernelConf).relay == true # explicit flat field overrides the Edge default WakuNodeConf(lc.kernelConf).filter == false # Edge default, not set explicitly - WakuNodeConf(lc.kernelConf).clusterId == some(7'u16) + WakuNodeConf(lc.kernelConf).clusterId == Opt.some(7'u16) test "flat blob's reliabilityEnabled routes to the messaging conf, not the kernel": let lc = parseLogosDeliveryConf("""{"relay": true, "reliabilityEnabled": true}""").valueOr: raiseAssert error check: - lc.messagingConf.get().reliabilityEnabled == some(true) + lc.messagingConf.get().reliabilityEnabled == Opt.some(true) test "an unknown key in a flat blob is rejected": check parseLogosDeliveryConf("""{"relay": true, "bogusKey": 1}""").isErr() @@ -396,7 +399,7 @@ suite "parseLogosDeliveryConf - flat WakuNodeConf shape (interop compatibility)" test "port 0 is accepted in structured messagingOverrides": let lc = parseLogosDeliveryConf("""{"messagingOverrides": {"tcp-port": 0}}""").valueOr: raiseAssert error - check lc.messagingConf.get().p2pTcpPort == some(Port(0)) + check lc.messagingConf.get().p2pTcpPort == Opt.some(Port(0)) test "mode/preset with no bare field stays structured; a bare field flips it to flat": # No bare kernel field -> structured: mode owns relay, no per-flag override. diff --git a/tests/api/test_entry_nodes.nim b/tests/api/test_entry_nodes.nim index a6faf58c8..2435d5f48 100644 --- a/tests/api/test_entry_nodes.nim +++ b/tests/api/test_entry_nodes.nim @@ -1,6 +1,6 @@ {.used.} -import std/options, results, testutils/unittests +import results, testutils/unittests import tools/confutils/entry_nodes diff --git a/tests/api/test_node_conf.nim b/tests/api/test_node_conf.nim index 6048a5951..cf2b36cc5 100644 --- a/tests/api/test_node_conf.nim +++ b/tests/api/test_node_conf.nim @@ -1,6 +1,6 @@ {.used.} -import std/options, results, testutils/unittests +import results, testutils/unittests import tools/confutils/cli_args, logos_delivery/waku/factory/waku_conf, diff --git a/tests/channels/test_reliable_channel_send_receive.nim b/tests/channels/test_reliable_channel_send_receive.nim index b76851006..53a88f27a 100644 --- a/tests/channels/test_reliable_channel_send_receive.nim +++ b/tests/channels/test_reliable_channel_send_receive.nim @@ -1,6 +1,6 @@ {.used.} -import std/[net, options, os] +import results, std/[net, os] from std/times import epochTime import chronos, testutils/unittests, stew/byteutils import brokers/broker_context @@ -34,7 +34,7 @@ proc createApiNodeConf(): WakuNodeConf = conf.listenAddress = parseIpAddress("0.0.0.0") conf.tcpPort = Port(0) conf.discv5UdpPort = Port(0) - conf.clusterId = some(3'u16) + conf.clusterId = Opt.some(3'u16) conf.numShardsInNetwork = 1 conf.rest = false return conf diff --git a/tests/common/test_enr_builder.nim b/tests/common/test_enr_builder.nim index 0c87cf744..83867673e 100644 --- a/tests/common/test_enr_builder.nim +++ b/tests/common/test_enr_builder.nim @@ -1,6 +1,6 @@ {.used.} -import std/[options, net], results, testutils/unittests +import std/net, results, testutils/unittests import logos_delivery/waku/common/enr, ../testlib/wakucore suite "nim-eth ENR - builder and typed record": @@ -30,7 +30,7 @@ suite "nim-eth ENR - builder and typed record": let id = record.id check: - id == some(RecordId.V4) + id == Opt.some(RecordId.V4) let publicKey = record.secp256k1 check: @@ -58,7 +58,9 @@ suite "nim-eth ENR - Ext: IP address and TCP/UDP ports": ## When var builder = EnrBuilder.init(privateKey, seqNum) - builder.withIpAddressAndPorts(ipAddr = some(enrIpAddr), udpPort = some(enrUdpPort)) + builder.withIpAddressAndPorts( + ipAddr = Opt.some(enrIpAddr), udpPort = Opt.some(enrUdpPort) + ) let enrRes = builder.build() @@ -81,7 +83,9 @@ suite "nim-eth ENR - Ext: IP address and TCP/UDP ports": ## When var builder = EnrBuilder.init(privateKey, seqNum) - builder.withIpAddressAndPorts(ipAddr = some(enrIpAddr), tcpPort = some(enrTcpPort)) + builder.withIpAddressAndPorts( + ipAddr = Opt.some(enrIpAddr), tcpPort = Opt.some(enrTcpPort) + ) let enrRes = builder.build() @@ -91,10 +95,10 @@ suite "nim-eth ENR - Ext: IP address and TCP/UDP ports": let record = enrRes.tryGet().toTyped().get() check: @(record.secp256k1.get()) == expectedPubKey - record.ip == some(enrIpAddr.address_v4) - record.tcp == some(enrTcpPort.uint16) - record.udp == none(uint16) - record.ip6 == none(array[16, byte]) + record.ip == Opt.some(enrIpAddr.address_v4) + record.tcp == Opt.some(enrTcpPort.uint16) + record.udp == Opt.none(uint16) + record.ip6 == Opt.none(array[16, byte]) test "IPv6 and UDP port": let @@ -108,7 +112,9 @@ suite "nim-eth ENR - Ext: IP address and TCP/UDP ports": ## When var builder = EnrBuilder.init(privateKey, seqNum) - builder.withIpAddressAndPorts(ipAddr = some(enrIpAddr), udpPort = some(enrUdpPort)) + builder.withIpAddressAndPorts( + ipAddr = Opt.some(enrIpAddr), udpPort = Opt.some(enrUdpPort) + ) let enrRes = builder.build() @@ -118,9 +124,9 @@ suite "nim-eth ENR - Ext: IP address and TCP/UDP ports": let record = enrRes.tryGet().toTyped().get() check: @(record.secp256k1.get()) == expectedPubKey - record.ip == none(array[4, byte]) - record.tcp == none(uint16) - record.ip6 == some(enrIpAddr.address_v6) - record.tcp6 == none(uint16) - record.udp6 == some(enrUdpPort.uint16) - record.udp == some(enrUdpPort.uint16) + record.ip == Opt.none(array[4, byte]) + record.tcp == Opt.none(uint16) + record.ip6 == Opt.some(enrIpAddr.address_v6) + record.tcp6 == Opt.none(uint16) + record.udp6 == Opt.some(enrUdpPort.uint16) + record.udp == Opt.some(enrUdpPort.uint16) diff --git a/tests/common/test_ratelimit_setting.nim b/tests/common/test_ratelimit_setting.nim index d8140381e..0add4b76f 100644 --- a/tests/common/test_ratelimit_setting.nim +++ b/tests/common/test_ratelimit_setting.nim @@ -11,7 +11,7 @@ import libp2p/crypto/crypto import testutils/unittests import chronos, libp2p/stream/connection -import std/[options, tables] +import std/tables import ../../logos_delivery/waku/common/rate_limit/request_limiter import ../../logos_delivery/waku/common/rate_limit/timed_map diff --git a/tests/common/test_requestratelimiter.nim b/tests/common/test_requestratelimiter.nim index bd055c0f6..42b4df445 100644 --- a/tests/common/test_requestratelimiter.nim +++ b/tests/common/test_requestratelimiter.nim @@ -11,7 +11,7 @@ import libp2p/crypto/crypto import testutils/unittests import chronos, libp2p/stream/connection -import std/options +import results import ../../logos_delivery/waku/common/rate_limit/request_limiter import ../../logos_delivery/waku/common/rate_limit/timed_map @@ -27,7 +27,7 @@ suite "RequestRateLimiter": test "RequestRateLimiter Allow up to main bucket": # keep limits low for easier calculation of ratios let rateLimit: RateLimitSetting = (4, 2.minutes) - var limiter = newRequestRateLimiter(some(rateLimit)) + var limiter = newRequestRateLimiter(Opt.some(rateLimit)) # per peer tokens will be 6 / 4min # as ratio is 2 in this case but max tokens are main tokens*ratio . 0.75 # notice meanwhile we have 8 global tokens over 2 period (4 mins) in sum @@ -52,7 +52,7 @@ suite "RequestRateLimiter": test "RequestRateLimiter Restrict overusing peer": # keep limits low for easier calculation of ratios let rateLimit: RateLimitSetting = (10, 2.minutes) - var limiter = newRequestRateLimiter(some(rateLimit)) + var limiter = newRequestRateLimiter(Opt.some(rateLimit)) # per peer tokens will be 15 / 4min # as ratio is 2 in this case but max tokens are main tokens*ratio . 0.75 # notice meanwhile we have 20 tokens over 2 period (4 mins) in sum @@ -88,7 +88,7 @@ suite "RequestRateLimiter": test "RequestRateLimiter lowest possible volume": # keep limits low for easier calculation of ratios let rateLimit: RateLimitSetting = (1, 1.seconds) - var limiter = newRequestRateLimiter(some(rateLimit)) + var limiter = newRequestRateLimiter(Opt.some(rateLimit)) let now = Moment.now() # with first use we register the peer also and start its timer diff --git a/tests/factory/test_node_factory.nim b/tests/factory/test_node_factory.nim index b4e8429a3..9b95cdaea 100644 --- a/tests/factory/test_node_factory.nim +++ b/tests/factory/test_node_factory.nim @@ -1,7 +1,8 @@ {.used.} import - std/[net, options, sequtils, strutils], + results, + std/[net, sequtils, strutils], testutils/unittests, chronos, chronos/transports/[stream, datagram, common], @@ -75,7 +76,7 @@ suite "Node Factory": bindPort = bindPort, extMultiAddrs = oversizedMultiaddrs, extMultiAddrsOnly = true, - wakuFlags = some(conf.wakuFlags), + wakuFlags = Opt.some(conf.wakuFlags), ).valueOr: raiseAssert error diff --git a/tests/factory/test_waku_conf.nim b/tests/factory/test_waku_conf.nim index 117f23250..d386b0088 100644 --- a/tests/factory/test_waku_conf.nim +++ b/tests/factory/test_waku_conf.nim @@ -4,7 +4,7 @@ import libp2p/crypto/[crypto, secp], libp2p/multiaddress, nimcrypto/utils, - std/[net, options, random, sequtils], + std/[net, random, sequtils], results, testutils/unittests import @@ -288,7 +288,7 @@ suite "Waku Conf - build with cluster conf": ## Passing an AutoSharding preset and trying to override with ## --num-shards-in-network=0 (which is StaticSharding) doesn't work. ## Note that --num-shards-in-network=0 and omitting the switch are - ## internally the same. Promoting the config to an Option[uint16] is + ## internally the same. Promoting the config to an Opt[uint16] is ## probably not worth it since overriding an AutoSharding preset with ## StaticSharding shouldn't make any sense (that is, no use case). diff --git a/tests/incentivization/test_poc_eligibility.nim b/tests/incentivization/test_poc_eligibility.nim index f9f1c53fa..44baae783 100644 --- a/tests/incentivization/test_poc_eligibility.nim +++ b/tests/incentivization/test_poc_eligibility.nim @@ -1,6 +1,6 @@ {.used.} -import std/options, testutils/unittests, chronos, web3, stint, tests/testlib/testasync +import results, testutils/unittests, chronos, web3, stint, tests/testlib/testasync import logos_delivery/waku/node/peer_manager, @@ -145,7 +145,7 @@ suite "Waku Incentivization PoC Eligibility Proofs": ## Test that an unconfirmed tx is not eligible. let eligibilityProof = - EligibilityProof(proofOfPayment: some(@(TxHashNonExisting.bytes()))) + EligibilityProof(proofOfPayment: Opt.some(@(TxHashNonExisting.bytes()))) let isEligible = await manager.isEligibleTxId( eligibilityProof, receiverExpected, TxValueExpectedWei ) @@ -156,7 +156,7 @@ suite "Waku Incentivization PoC Eligibility Proofs": ## Test that a contract creation tx is not eligible. let eligibilityProof = - EligibilityProof(proofOfPayment: some(@(txHashContractCreation.bytes()))) + EligibilityProof(proofOfPayment: Opt.some(@(txHashContractCreation.bytes()))) let isEligible = await manager.isEligibleTxId( eligibilityProof, receiverExpected, TxValueExpectedWei ) @@ -168,7 +168,7 @@ suite "Waku Incentivization PoC Eligibility Proofs": ## This assumes a payment in native currency (ETH), not a token. let eligibilityProof = - EligibilityProof(proofOfPayment: some(@(txHashContractCall.bytes()))) + EligibilityProof(proofOfPayment: Opt.some(@(txHashContractCall.bytes()))) let isEligible = await manager.isEligibleTxId( eligibilityProof, receiverExpected, TxValueExpectedWei ) @@ -178,8 +178,9 @@ suite "Waku Incentivization PoC Eligibility Proofs": asyncTest "incentivization PoC: simple transfer tx is eligible": ## Test that a simple transfer tx is eligible (if necessary conditions hold). - let eligibilityProof = - EligibilityProof(proofOfPayment: some(@(txHashRightReceiverRightAmount.bytes()))) + let eligibilityProof = EligibilityProof( + proofOfPayment: Opt.some(@(txHashRightReceiverRightAmount.bytes())) + ) let isEligible = await manager.isEligibleTxId( eligibilityProof, receiverExpected, TxValueExpectedWei ) @@ -189,8 +190,9 @@ suite "Waku Incentivization PoC Eligibility Proofs": asyncTest "incentivization PoC: double-spend tx is not eligible": ## Test that the same tx submitted twice is not eligible the second time - let eligibilityProof = - EligibilityProof(proofOfPayment: some(@(txHashRightReceiverRightAmount.bytes()))) + let eligibilityProof = EligibilityProof( + proofOfPayment: Opt.some(@(txHashRightReceiverRightAmount.bytes())) + ) let isEligibleOnce = await manager.isEligibleTxId( eligibilityProof, receiverExpected, TxValueExpectedWei diff --git a/tests/incentivization/test_poc_reputation.nim b/tests/incentivization/test_poc_reputation.nim index f64947614..4d1506608 100644 --- a/tests/incentivization/test_poc_reputation.nim +++ b/tests/incentivization/test_poc_reputation.nim @@ -1,4 +1,4 @@ -import std/options, testutils/unittests, chronos, web3 +import results, testutils/unittests, chronos, web3 import logos_delivery/waku/incentivization/reputation_manager, @@ -14,32 +14,33 @@ suite "Waku Incentivization PoC Reputation": check manager.reputationOf.len == 0 test "incentivization PoC: reputation: set and get reputation": - manager.setReputation("peer1", some(true)) # Encodes GoodRep - check manager.getReputation("peer1") == some(true) + manager.setReputation("peer1", Opt.some(true)) # Encodes GoodRep + check manager.getReputation("peer1") == Opt.some(true) test "incentivization PoC: reputation: evaluate PushResponse valid": let validLightpushResponse = - PushResponse(isSuccess: true, info: some("Everything is OK")) + PushResponse(isSuccess: true, info: Opt.some("Everything is OK")) # We expect evaluateResponse to return GoodResponse if isSuccess is true check evaluateResponse(validLightpushResponse) == GoodResponse test "incentivization PoC: reputation: evaluate PushResponse invalid": - let invalidLightpushResponse = PushResponse(isSuccess: false, info: none(string)) + let invalidLightpushResponse = + PushResponse(isSuccess: false, info: Opt.none(string)) check evaluateResponse(invalidLightpushResponse) == BadResponse test "incentivization PoC: reputation: updateReputationFromResponse valid": let peerId = "peerWithValidResponse" - let validResp = PushResponse(isSuccess: true, info: some("All good")) + let validResp = PushResponse(isSuccess: true, info: Opt.some("All good")) manager.updateReputationFromResponse(peerId, validResp) - check manager.getReputation(peerId) == some(true) + check manager.getReputation(peerId) == Opt.some(true) test "incentivization PoC: reputation: updateReputationFromResponse invalid": let peerId = "peerWithInvalidResponse" - let invalidResp = PushResponse(isSuccess: false, info: none(string)) + let invalidResp = PushResponse(isSuccess: false, info: Opt.none(string)) manager.updateReputationFromResponse(peerId, invalidResp) - check manager.getReputation(peerId) == some(false) + check manager.getReputation(peerId) == Opt.some(false) test "incentivization PoC: reputation: default is None": let unknownPeerId = "unknown_peer" # The peer is not in the table yet - check manager.getReputation(unknownPeerId) == none(bool) + check manager.getReputation(unknownPeerId) == Opt.none(bool) diff --git a/tests/incentivization/test_rpc_codec.nim b/tests/incentivization/test_rpc_codec.nim index 672633113..0067f37ee 100644 --- a/tests/incentivization/test_rpc_codec.nim +++ b/tests/incentivization/test_rpc_codec.nim @@ -1,4 +1,4 @@ -import std/options, testutils/unittests, chronos, libp2p/crypto/crypto, web3 +import results, testutils/unittests, chronos, libp2p/crypto/crypto, web3 import logos_delivery/waku/incentivization/[rpc, rpc_codec, common] @@ -8,7 +8,7 @@ suite "Waku Incentivization Eligibility Codec": "0x0000000000000000000000000000000000000000000000000000000000000000" ) let txHashAsBytes = @(txHash.bytes()) - let eligibilityProof = EligibilityProof(proofOfPayment: some(txHashAsBytes)) + let eligibilityProof = EligibilityProof(proofOfPayment: Opt.some(txHashAsBytes)) let encoded = encode(eligibilityProof) let decoded = EligibilityProof.decode(encoded.buffer).get() check: diff --git a/tests/node/peer_manager/peer_store/test_migrations.nim b/tests/node/peer_manager/peer_store/test_migrations.nim index 7925af92d..7c4a67e7b 100644 --- a/tests/node/peer_manager/peer_store/test_migrations.nim +++ b/tests/node/peer_manager/peer_store/test_migrations.nim @@ -1,4 +1,4 @@ -import std/[options], results, testutils/unittests +import results, testutils/unittests import logos_delivery/waku/node/peer_manager/peer_store/migrations, diff --git a/tests/node/peer_manager/peer_store/test_waku_peer_storage.nim b/tests/node/peer_manager/peer_store/test_waku_peer_storage.nim index e7dd2a151..2f1a536c6 100644 --- a/tests/node/peer_manager/peer_store/test_waku_peer_storage.nim +++ b/tests/node/peer_manager/peer_store/test_waku_peer_storage.nim @@ -1,5 +1,5 @@ import - std/[nativesockets, options, sequtils], + std/[nativesockets, sequtils], testutils/unittests, libp2p/[multiaddress, peerid], libp2p/crypto/crypto, diff --git a/tests/node/peer_manager/peer_store/utils.nim b/tests/node/peer_manager/peer_store/utils.nim index c7c380b43..0ab940417 100644 --- a/tests/node/peer_manager/peer_store/utils.nim +++ b/tests/node/peer_manager/peer_store/utils.nim @@ -1,9 +1,9 @@ -import std/options, results +import results import logos_delivery/waku/node/peer_manager/[waku_peer_store, peer_store/waku_peer_storage], ../../../waku_archive/archive_utils -proc newTestWakuPeerStorage*(path: Option[string] = string.none()): WakuPeerStorage = +proc newTestWakuPeerStorage*(path: Opt[string] = Opt.none(string)): WakuPeerStorage = let db = newSqliteDatabase(path) WakuPeerStorage.new(db).value() diff --git a/tests/node/peer_manager/test_peer_manager.nim b/tests/node/peer_manager/test_peer_manager.nim index 25e6f4916..9ec37b9fc 100644 --- a/tests/node/peer_manager/test_peer_manager.nim +++ b/tests/node/peer_manager/test_peer_manager.nim @@ -1,4 +1,4 @@ -import chronicles, std/[options, tables, strutils], chronos, testutils/unittests +import results, chronicles, std/[tables, strutils], chronos, testutils/unittests import logos_delivery/waku/node/waku_node, @@ -52,7 +52,7 @@ suite "Peer Manager": # When making an operation that triggers onPeerMetadata discard await client.filterSubscribe( - some("/waku/2/rs/0/0"), "waku/lightpush/1", serverRemotePeerInfo + Opt.some("/waku/2/rs/0/0"), "waku/lightpush/1", serverRemotePeerInfo ) await sleepAsync(FUTURE_TIMEOUT) diff --git a/tests/node/test_wakunode_filter.nim b/tests/node/test_wakunode_filter.nim index dd92c0c37..0f2996081 100644 --- a/tests/node/test_wakunode_filter.nim +++ b/tests/node/test_wakunode_filter.nim @@ -2,7 +2,8 @@ import libp2p/crypto/crypto {.used.} import - std/[options, tables, sequtils, strutils, sets], + results, + std/[tables, sequtils, strutils, sets], testutils/unittests, chronos, chronicles, @@ -28,7 +29,7 @@ proc generateRequestId(rng: crypto.Rng): string = proc createRequest( filterSubscribeType: FilterSubscribeType, - pubsubTopic = none(PubsubTopic), + pubsubTopic = Opt.none(PubsubTopic), contentTopics = newSeq[ContentTopic](), ): FilterSubscribeRequest = let requestId = generateRequestId(common.rng()) @@ -91,7 +92,7 @@ suite "Waku Filter - End to End": asyncTest "Client Node receives Push from Server Node, via Filter": # When a client node subscribes to a filter node let subscribeResponse = await client.filterSubscribe( - some(pubsubTopic), contentTopicSeq, serverRemotePeerInfo + Opt.some(pubsubTopic), contentTopicSeq, serverRemotePeerInfo ) # Then the subscription is successful @@ -113,7 +114,7 @@ suite "Waku Filter - End to End": # When unsubscribing from the subscription let unsubscribeResponse = await client.filterUnsubscribe( - some(pubsubTopic), contentTopicSeq, serverRemotePeerInfo + Opt.some(pubsubTopic), contentTopicSeq, serverRemotePeerInfo ) # Then the unsubscription is successful @@ -137,7 +138,7 @@ suite "Waku Filter - End to End": # And valid filter subscription let subscribeResponse = await client.filterSubscribe( - some(pubsubTopic), contentTopicSeq, serverRemotePeerInfo + Opt.some(pubsubTopic), contentTopicSeq, serverRemotePeerInfo ) require: subscribeResponse.isOk() @@ -145,7 +146,7 @@ suite "Waku Filter - End to End": # When a server node gets a Relay message let msg1 = fakeWakuMessage(contentTopic = contentTopic) - discard await server.publish(some(pubsubTopic), msg1) + discard await server.publish(Opt.some(pubsubTopic), msg1) # Then the message is not sent to the client's filter push handler check (not await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT)) @@ -164,7 +165,7 @@ suite "Waku Filter - End to End": # When a client node subscribes to the server node let subscribeResponse = await client.filterSubscribe( - some(pubsubTopic), contentTopicSeq, serverRemotePeerInfo + Opt.some(pubsubTopic), contentTopicSeq, serverRemotePeerInfo ) # Then the subscription is successful @@ -178,7 +179,7 @@ suite "Waku Filter - End to End": # Given a valid filter subscription var subscribeResponse = await client.filterSubscribe( - some(pubsubTopic), contentTopicSeq, serverRemotePeerInfo + Opt.some(pubsubTopic), contentTopicSeq, serverRemotePeerInfo ) require: subscribeResponse.isOk() @@ -203,7 +204,7 @@ suite "Waku Filter - End to End": # Given a valid filter subscription subscribeResponse = await client.filterSubscribe( - some(pubsubTopic), contentTopicSeq, serverRemotePeerInfo + Opt.some(pubsubTopic), contentTopicSeq, serverRemotePeerInfo ) require: subscribeResponse.isOk() @@ -226,7 +227,7 @@ suite "Waku Filter - End to End": # Given a valid filter subscription let subscribeResponse = await client.filterSubscribe( - some(pubsubTopic), contentTopicSeq, serverRemotePeerInfo + Opt.some(pubsubTopic), contentTopicSeq, serverRemotePeerInfo ) require: subscribeResponse.isOk() @@ -238,14 +239,14 @@ suite "Waku Filter - End to End": # When a message is sent to the subscribed content topic, via Relay let msg = fakeWakuMessage(contentTopic = contentTopic) - discard await server.publish(some(pubsubTopic), msg) + discard await server.publish(Opt.some(pubsubTopic), msg) # Then the message is not sent to the client's filter push handler check (not await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT)) # Given the client refreshes the subscription let subscribeResponse2 = await clientClone.filterSubscribe( - some(pubsubTopic), contentTopicSeq, serverRemotePeerInfo + Opt.some(pubsubTopic), contentTopicSeq, serverRemotePeerInfo ) check: subscribeResponse2.isOk() @@ -254,7 +255,7 @@ suite "Waku Filter - End to End": # When a message is sent to the subscribed content topic, via Relay pushHandlerFuture = newPushHandlerFuture() let msg2 = fakeWakuMessage(contentTopic = contentTopic) - discard await server.publish(some(pubsubTopic), msg2) + discard await server.publish(Opt.some(pubsubTopic), msg2) # Then the message is not sent to the client's filter push handler check (not await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT)) @@ -269,7 +270,7 @@ suite "Waku Filter - End to End": createRequest(filterSubscribeType = FilterSubscribeType.SUBSCRIBER_PING) filterSubscribeRequest = createRequest( filterSubscribeType = FilterSubscribeType.SUBSCRIBE, - pubsubTopic = some(DefaultPubsubTopic), + pubsubTopic = Opt.some(DefaultPubsubTopic), contentTopics = @[DefaultContentTopic], ) @@ -308,7 +309,7 @@ suite "Waku Filter - End to End": serverPeerId = server.switch.peerInfo.peerId filterSubscribeRequest = createRequest( filterSubscribeType = FilterSubscribeType.SUBSCRIBE, - pubsubTopic = some(DefaultPubsubTopic), + pubsubTopic = Opt.some(DefaultPubsubTopic), contentTopics = @[DefaultContentTopic], ) filterUnsubscribeRequest = createRequest( @@ -353,7 +354,7 @@ suite "Waku Filter - End to End": nonDefaultContentTopic = ContentTopic("/waku/2/non-default-waku/proto") filterSubscribeRequest = createRequest( filterSubscribeType = FilterSubscribeType.SUBSCRIBE, - pubsubTopic = some(DefaultPubsubTopic), + pubsubTopic = Opt.some(DefaultPubsubTopic), contentTopics = @[DefaultContentTopic, nonDefaultContentTopic], ) filterUnsubscribeAllRequest = @@ -399,7 +400,7 @@ suite "Waku Filter - End to End": nonDefaultContentTopic = ContentTopic("/waku/2/non-default-waku/proto") filterSubscribeRequest1 = createRequest( filterSubscribeType = FilterSubscribeType.SUBSCRIBE, - pubsubTopic = some(DefaultPubsubTopic), + pubsubTopic = Opt.some(DefaultPubsubTopic), contentTopics = @[DefaultContentTopic], ) filterSubscribeRequest2 = createRequest( @@ -500,12 +501,12 @@ suite "Waku Filter - End to End": let reqNoPubsubTopic = createRequest( filterSubscribeType = FilterSubscribeType.SUBSCRIBE, - pubsubTopic = none(PubsubTopic), + pubsubTopic = Opt.none(PubsubTopic), contentTopics = @[DefaultContentTopic], ) reqNoContentTopics = createRequest( filterSubscribeType = FilterSubscribeType.SUBSCRIBE, - pubsubTopic = some(DefaultPubsubTopic), + pubsubTopic = Opt.some(DefaultPubsubTopic), contentTopics = @[], ) response1 = @@ -535,7 +536,7 @@ suite "Waku Filter - End to End": ) reqTooManyContentTopics = createRequest( filterSubscribeType = FilterSubscribeType.SUBSCRIBE, - pubsubTopic = some(DefaultPubsubTopic), + pubsubTopic = Opt.some(DefaultPubsubTopic), contentTopics = contentTopics, ) response3 = @@ -561,7 +562,7 @@ suite "Waku Filter - End to End": let reqTooManyFilterCriteria = createRequest( filterSubscribeType = FilterSubscribeType.SUBSCRIBE, - pubsubTopic = some(DefaultPubsubTopic), + pubsubTopic = Opt.some(DefaultPubsubTopic), contentTopics = @[DefaultContentTopic], ) response4 = @@ -609,7 +610,7 @@ suite "Waku Filter - End to End": let reqTooManySubscriptions = createRequest( filterSubscribeType = FilterSubscribeType.SUBSCRIBE, - pubsubTopic = some(DefaultPubsubTopic), + pubsubTopic = Opt.some(DefaultPubsubTopic), contentTopics = @[DefaultContentTopic], ) response5 = @@ -645,12 +646,12 @@ suite "Waku Filter - End to End": let reqNoPubsubTopic = createRequest( filterSubscribeType = FilterSubscribeType.UNSUBSCRIBE, - pubsubTopic = none(PubsubTopic), + pubsubTopic = Opt.none(PubsubTopic), contentTopics = @[DefaultContentTopic], ) reqNoContentTopics = createRequest( filterSubscribeType = FilterSubscribeType.UNSUBSCRIBE, - pubsubTopic = some(DefaultPubsubTopic), + pubsubTopic = Opt.some(DefaultPubsubTopic), contentTopics = @[], ) response1 = @@ -680,7 +681,7 @@ suite "Waku Filter - End to End": ) reqTooManyContentTopics = createRequest( filterSubscribeType = FilterSubscribeType.UNSUBSCRIBE, - pubsubTopic = some(DefaultPubsubTopic), + pubsubTopic = Opt.some(DefaultPubsubTopic), contentTopics = contentTopics, ) response3 = @@ -698,7 +699,7 @@ suite "Waku Filter - End to End": let reqSubscriptionNotFound = createRequest( filterSubscribeType = FilterSubscribeType.UNSUBSCRIBE, - pubsubTopic = some(DefaultPubsubTopic), + pubsubTopic = Opt.some(DefaultPubsubTopic), contentTopics = @[DefaultContentTopic], ) response4 = @@ -740,7 +741,7 @@ suite "Waku Filter - End to End": client3 = newTestWakuNode(generateSecp256k1Key()) filterSubscribeRequest = createRequest( filterSubscribeType = FilterSubscribeType.SUBSCRIBE, - pubsubTopic = some(DefaultPubsubTopic), + pubsubTopic = Opt.some(DefaultPubsubTopic), contentTopics = @[DefaultContentTopic], ) diff --git a/tests/node/test_wakunode_health_monitor.nim b/tests/node/test_wakunode_health_monitor.nim index af90a9be0..71203010f 100644 --- a/tests/node/test_wakunode_health_monitor.nim +++ b/tests/node/test_wakunode_health_monitor.nim @@ -1,7 +1,6 @@ {.used.} -import - std/[json, options, sequtils, strutils, tables], testutils/unittests, chronos, results +import std/[json, sequtils, strutils, tables], testutils/unittests, chronos, results import brokers/broker_context import @@ -51,7 +50,7 @@ suite "Health Monitor - health state calculation": protoHealthMock(LightpushClientProtocol, HealthStatus.NOT_READY), ] let strength = initTable[WakuProtocol, int]() - let state = calculateConnectionState(protocols, strength, some(MockDLow)) + let state = calculateConnectionState(protocols, strength, Opt.some(MockDLow)) check state == ConnectionStatus.Disconnected test "PartiallyConnected, weak relay": @@ -59,7 +58,7 @@ suite "Health Monitor - health state calculation": let protocols = @[protoHealthMock(RelayProtocol, HealthStatus.READY)] var strength = initTable[WakuProtocol, int]() strength[RelayProtocol] = weakCount - let state = calculateConnectionState(protocols, strength, some(MockDLow)) + let state = calculateConnectionState(protocols, strength, Opt.some(MockDLow)) # Partially connected since relay connectivity is weak (> 0, but < dLow) check state == ConnectionStatus.PartiallyConnected @@ -67,7 +66,7 @@ suite "Health Monitor - health state calculation": let protocols = @[protoHealthMock(RelayProtocol, HealthStatus.READY)] var strength = initTable[WakuProtocol, int]() strength[RelayProtocol] = MockDLow - let state = calculateConnectionState(protocols, strength, some(MockDLow)) + let state = calculateConnectionState(protocols, strength, Opt.some(MockDLow)) # Fully connected since relay connectivity is ideal (>= dLow) check state == ConnectionStatus.Connected @@ -82,7 +81,7 @@ suite "Health Monitor - health state calculation": strength[LightpushClientProtocol] = HealthyThreshold strength[FilterClientProtocol] = HealthyThreshold strength[StoreClientProtocol] = HealthyThreshold - let state = calculateConnectionState(protocols, strength, some(MockDLow)) + let state = calculateConnectionState(protocols, strength, Opt.some(MockDLow)) check state == ConnectionStatus.Connected test "Disconnected, edge missing store": @@ -95,7 +94,7 @@ suite "Health Monitor - health state calculation": strength[LightpushClientProtocol] = HealthyThreshold strength[FilterClientProtocol] = HealthyThreshold strength[StoreClientProtocol] = 0 - let state = calculateConnectionState(protocols, strength, some(MockDLow)) + let state = calculateConnectionState(protocols, strength, Opt.some(MockDLow)) check state == ConnectionStatus.Disconnected test "PartiallyConnected, edge meets minimum failover requirement": @@ -109,7 +108,7 @@ suite "Health Monitor - health state calculation": strength[LightpushClientProtocol] = weakCount strength[FilterClientProtocol] = weakCount strength[StoreClientProtocol] = weakCount - let state = calculateConnectionState(protocols, strength, some(MockDLow)) + let state = calculateConnectionState(protocols, strength, Opt.some(MockDLow)) check state == ConnectionStatus.PartiallyConnected test "Connected, robust relay ignores store server": @@ -120,7 +119,7 @@ suite "Health Monitor - health state calculation": var strength = initTable[WakuProtocol, int]() strength[RelayProtocol] = MockDLow strength[StoreProtocol] = 0 - let state = calculateConnectionState(protocols, strength, some(MockDLow)) + let state = calculateConnectionState(protocols, strength, Opt.some(MockDLow)) check state == ConnectionStatus.Connected test "Connected, robust relay ignores store client": @@ -133,7 +132,7 @@ suite "Health Monitor - health state calculation": strength[RelayProtocol] = MockDLow strength[StoreProtocol] = 0 strength[StoreClientProtocol] = 0 - let state = calculateConnectionState(protocols, strength, some(MockDLow)) + let state = calculateConnectionState(protocols, strength, Opt.some(MockDLow)) check state == ConnectionStatus.Connected suite "Health Monitor - events": @@ -238,7 +237,7 @@ suite "Health Monitor - events": node: nodeA, conf: defaultTestWakuConf(), stateInfo: WakuStateInfo.init(nodeA) ) let ds = MessagingClient - .new(MessagingClientConf(reliabilityEnabled: some(false)), waku) + .new(MessagingClientConf(reliabilityEnabled: Opt.some(false)), waku) .expect("Failed to create MessagingClient") ds.start().expect("Failed to start MessagingClient") @@ -349,7 +348,7 @@ suite "Health Monitor - events": node: nodeA, conf: defaultTestWakuConf(), stateInfo: WakuStateInfo.init(nodeA) ) let ds = MessagingClient - .new(MessagingClientConf(reliabilityEnabled: some(false)), waku) + .new(MessagingClientConf(reliabilityEnabled: Opt.some(false)), waku) .expect("Failed to create MessagingClient") ds.start().expect("Failed to start MessagingClient") let subMgr = nodeA.subscriptionManager diff --git a/tests/node/test_wakunode_legacy_lightpush.nim b/tests/node/test_wakunode_legacy_lightpush.nim index aec37e18c..bbd37fb6e 100644 --- a/tests/node/test_wakunode_legacy_lightpush.nim +++ b/tests/node/test_wakunode_legacy_lightpush.nim @@ -1,7 +1,8 @@ {.used.} import - std/[options, tempfiles, net, osproc, strutils], + results, + std/[tempfiles, net, osproc, strutils], testutils/unittests, chronos, std/strformat, @@ -65,7 +66,7 @@ suite "Waku Legacy Lightpush - End To End": # When the client publishes a message let publishResponse = await lightpushClient.legacyLightpushPublish( - some(pubsubTopic), message, serverRemotePeerInfo + Opt.some(pubsubTopic), message, serverRemotePeerInfo ) if not publishResponse.isOk(): @@ -86,7 +87,7 @@ suite "Waku Legacy Lightpush - End To End": # When the client publishes an over-limit message let publishResponse = await client.legacyLightpushPublish( - some(pubsubTopic), msgOverLimit, serverRemotePeerInfo + Opt.some(pubsubTopic), msgOverLimit, serverRemotePeerInfo ) check: @@ -115,7 +116,7 @@ suite "RLN Proofs as a Lightpush Service": server = newTestWakuNode(serverKey) client = newTestWakuNode(clientKey) - anvilProc = runAnvil(stateFile = some(DEFAULT_ANVIL_STATE_PATH)) + anvilProc = runAnvil(stateFile = Opt.some(DEFAULT_ANVIL_STATE_PATH)) manager = waitFor setupOnchainGroupManager(deployContracts = false) # mount rln-relay @@ -170,11 +171,11 @@ suite "RLN Proofs as a Lightpush Service": # proof in legacyLightpushPublish; here we generate it using the server's RLN # instance since both ends share group state via the in-memory manager. let msgWithProof = - (await checkAndGenerateRLNProof(some(server.rln), message)).get() + (await checkAndGenerateRLNProof(Opt.some(server.rln), message)).get() # When the client publishes a message let publishResponse = await lightpushClient.legacyLightpushPublish( - some(pubsubTopic), msgWithProof, serverRemotePeerInfo + Opt.some(pubsubTopic), msgWithProof, serverRemotePeerInfo ) if not publishResponse.isOk(): @@ -204,7 +205,7 @@ suite "RLN Proofs as a Lightpush Service": server.wakuLegacyLightPush.pushHandler = stub let response = await server.legacyLightpushPublish( - some(pubsubTopic), message, server.peerInfo.toRemotePeerInfo() + Opt.some(pubsubTopic), message, server.peerInfo.toRemotePeerInfo() ) check: @@ -221,7 +222,7 @@ suite "RLN Proofs as a Lightpush Service": server.wakuLegacyLightPush.pushHandler = stub let response = await server.legacyLightpushPublish( - some(pubsubTopic), message, server.peerInfo.toRemotePeerInfo() + Opt.some(pubsubTopic), message, server.peerInfo.toRemotePeerInfo() ) check: @@ -239,7 +240,7 @@ suite "RLN Proofs as a Lightpush Service": server.wakuLegacyLightPush.pushHandler = stub let response = await server.legacyLightpushPublish( - some(pubsubTopic), message, server.peerInfo.toRemotePeerInfo() + Opt.some(pubsubTopic), message, server.peerInfo.toRemotePeerInfo() ) check: @@ -264,7 +265,7 @@ suite "RLN Proofs as a Lightpush Service": server.wakuLegacyLightPush.pushHandler = stub let response = await server.legacyLightpushPublish( - some(pubsubTopic), message, server.peerInfo.toRemotePeerInfo() + Opt.some(pubsubTopic), message, server.peerInfo.toRemotePeerInfo() ) server.rln = savedRln @@ -318,7 +319,8 @@ suite "Waku Legacy Lightpush message delivery": await sleepAsync(100.millis) ## When - let res = await lightNode.legacyLightpushPublish(some(CustomPubsubTopic), message) + let res = + await lightNode.legacyLightpushPublish(Opt.some(CustomPubsubTopic), message) assert res.isOk(), $res.error ## Then diff --git a/tests/node/test_wakunode_lightpush.nim b/tests/node/test_wakunode_lightpush.nim index f13cbcaab..eaedb2c97 100644 --- a/tests/node/test_wakunode_lightpush.nim +++ b/tests/node/test_wakunode_lightpush.nim @@ -1,7 +1,8 @@ {.used.} import - std/[options, tempfiles, osproc, strutils], + results, + std/[tempfiles, osproc, strutils], testutils/unittests, chronos, std/strformat, @@ -60,7 +61,7 @@ suite "Waku Lightpush - End To End": # When the client publishes a message let publishResponse = await lightpushClient.lightpushPublish( - some(pubsubTopic), message, some(serverRemotePeerInfo) + Opt.some(pubsubTopic), message, Opt.some(serverRemotePeerInfo) ) if not publishResponse.isOk(): @@ -81,14 +82,16 @@ suite "Waku Lightpush - End To End": # When the client publishes an over-limit message let publishResponse = await client.lightpushPublish( - some(pubsubTopic), msgOverLimit, some(serverRemotePeerInfo) + Opt.some(pubsubTopic), msgOverLimit, Opt.some(serverRemotePeerInfo) ) check: publishResponse.isErr() publishResponse.error.code == LightPushErrorCode.INVALID_MESSAGE publishResponse.error.desc == - some(fmt"Message size exceeded maximum of {DefaultMaxWakuMessageSize} bytes") + Opt.some( + fmt"Message size exceeded maximum of {DefaultMaxWakuMessageSize} bytes" + ) suite "RLN Proofs as a Lightpush Service": var @@ -111,7 +114,7 @@ suite "RLN Proofs as a Lightpush Service": server = newTestWakuNode(serverKey) client = newTestWakuNode(clientKey) - anvilProc = runAnvil(stateFile = some(DEFAULT_ANVIL_STATE_PATH)) + anvilProc = runAnvil(stateFile = Opt.some(DEFAULT_ANVIL_STATE_PATH)) manager = waitFor setupOnchainGroupManager(deployContracts = false) # mount rln-relay @@ -166,11 +169,11 @@ suite "RLN Proofs as a Lightpush Service": # proof in lightpushPublish; here we generate it using the server's RLN instance # since both ends share group state via the in-memory manager. let msgWithProof = - (await checkAndGenerateRLNProof(some(server.rln), message)).get() + (await checkAndGenerateRLNProof(Opt.some(server.rln), message)).get() # When the client publishes a message let publishResponse = await lightpushClient.lightpushPublish( - some(pubsubTopic), msgWithProof, some(serverRemotePeerInfo) + Opt.some(pubsubTopic), msgWithProof, Opt.some(serverRemotePeerInfo) ) if not publishResponse.isOk(): @@ -186,7 +189,8 @@ suite "RLN Proofs as a Lightpush Service": # invalidateMerkleProofCache empties the cached path so the next # proof-gen refetches from chain, and attachRLNProof rebuilds the proof # even though the message already carries one. - let firstMsg = (await checkAndGenerateRLNProof(some(server.rln), message)).get() + let firstMsg = + (await checkAndGenerateRLNProof(Opt.some(server.rln), message)).get() check firstMsg.proof.len > 0 # Corrupt the cache to model a stale/invalid witness — the same state a @@ -231,7 +235,7 @@ suite "RLN Proofs as a Lightpush Service": let goodCache = manager.merkleProofCache check goodCache.len > 0 - let response = await server.lightpushPublish(some(pubsubTopic), message) + let response = await server.lightpushPublish(Opt.some(pubsubTopic), message) check: # The rejection is surfaced immediately — no internal republish — and @@ -260,7 +264,7 @@ suite "RLN Proofs as a Lightpush Service": ) server.wakuLightPush.pushHandler = stub - let response = await server.lightpushPublish(some(pubsubTopic), message) + let response = await server.lightpushPublish(Opt.some(pubsubTopic), message) check: callCount == 1 @@ -280,7 +284,7 @@ suite "RLN Proofs as a Lightpush Service": return lightpushSuccessResult(1) server.wakuLightPush.pushHandler = stub - let firstResponse = await server.lightpushPublish(some(pubsubTopic), message) + let firstResponse = await server.lightpushPublish(Opt.some(pubsubTopic), message) check: firstResponse.isErr() @@ -288,7 +292,7 @@ suite "RLN Proofs as a Lightpush Service": # Model the caller-level retry (send service next round, REST handler): # a second publish regenerates the proof against the refreshed cache. - let secondResponse = await server.lightpushPublish(some(pubsubTopic), message) + let secondResponse = await server.lightpushPublish(Opt.some(pubsubTopic), message) check: callCount == 2 @@ -305,7 +309,7 @@ suite "RLN Proofs as a Lightpush Service": lighpushErrorResult(LightPushErrorCode.INVALID_MESSAGE, "unrelated rejection") server.wakuLightPush.pushHandler = stub - let response = await server.lightpushPublish(some(pubsubTopic), message) + let response = await server.lightpushPublish(Opt.some(pubsubTopic), message) check: callCount == 1 @@ -323,7 +327,7 @@ suite "RLN Proofs as a Lightpush Service": ) server.wakuLightPush.pushHandler = stub - let response = await server.lightpushPublish(some(pubsubTopic), message) + let response = await server.lightpushPublish(Opt.some(pubsubTopic), message) check: callCount == 1 @@ -347,7 +351,7 @@ suite "RLN Proofs as a Lightpush Service": ) server.wakuLightPush.pushHandler = stub - let response = await server.lightpushPublish(some(pubsubTopic), message) + let response = await server.lightpushPublish(Opt.some(pubsubTopic), message) server.rln = savedRln @@ -402,7 +406,7 @@ suite "Waku Lightpush message delivery": await sleepAsync(100.millis) ## When - let res = await lightNode.lightpushPublish(some(CustomPubsubTopic), message) + let res = await lightNode.lightpushPublish(Opt.some(CustomPubsubTopic), message) assert res.isOk(), $res.error assert res.get() == 1, "Expected to relay the message to 1 node" diff --git a/tests/node/test_wakunode_peer_exchange.nim b/tests/node/test_wakunode_peer_exchange.nim index e70abadc9..d9857346a 100644 --- a/tests/node/test_wakunode_peer_exchange.nim +++ b/tests/node/test_wakunode_peer_exchange.nim @@ -1,7 +1,8 @@ {.used.} import - std/[options, sequtils], + results, + std/sequtils, testutils/unittests, chronos, chronicles, @@ -81,7 +82,7 @@ suite "Waku Peer Exchange": check: node.peerManager.switch.peerStore.peers.len == 0 res.error.status_code == SERVICE_UNAVAILABLE - res.error.status_desc == some("PeerExchangeClient is not mounted") + res.error.status_desc == Opt.some("PeerExchangeClient is not mounted") asyncTest "Node fetches with mounted peer exchange, but no peers": # Given a node with peer exchange mounted @@ -91,7 +92,7 @@ suite "Waku Peer Exchange": let res = await node.fetchPeerExchangePeers(1) check: res.error.status_code == SERVICE_UNAVAILABLE - res.error.status_desc == some("peer_not_found_failure") + res.error.status_desc == Opt.some("peer_not_found_failure") # Then no peers are fetched check node.peerManager.switch.peerStore.peers.len == 0 @@ -103,7 +104,7 @@ suite "Waku Peer Exchange": # Simulate node2 discovering node3 via Discv5 var rpInfo = node3.peerInfo.toRemotePeerInfo() - rpInfo.enr = some(node3.enr) + rpInfo.enr = Opt.some(node3.enr) node2.peerManager.addPeer(rpInfo, PeerOrigin.Discv5) # Set node2 as service peer (default one) for px protocol @@ -189,13 +190,13 @@ suite "Waku Peer Exchange with discv5": bindIp = parseIpAddress("0.0.0.0") nodeKey1 = generateSecp256k1Key() - node1 = newTestWakuNode(nodeKey1, bindIp, Port(0), wakuFlags = some(flags)) + node1 = newTestWakuNode(nodeKey1, bindIp, Port(0), wakuFlags = Opt.some(flags)) nodeKey2 = generateSecp256k1Key() - node2 = newTestWakuNode(nodeKey2, bindIp, Port(0), wakuFlags = some(flags)) + node2 = newTestWakuNode(nodeKey2, bindIp, Port(0), wakuFlags = Opt.some(flags)) nodeKey3 = generateSecp256k1Key() - node3 = newTestWakuNode(nodeKey3, bindIp, Port(0), wakuFlags = some(flags)) + node3 = newTestWakuNode(nodeKey3, bindIp, Port(0), wakuFlags = Opt.some(flags)) await allFutures(node1.start(), node2.start(), node3.start()) diff --git a/tests/node/test_wakunode_peer_manager.nim b/tests/node/test_wakunode_peer_manager.nim index 73ccfe2b9..92032cd41 100644 --- a/tests/node/test_wakunode_peer_manager.nim +++ b/tests/node/test_wakunode_peer_manager.nim @@ -1,8 +1,9 @@ {.used.} import + results, os, - std/[options, tables], + std/tables, testutils/unittests, chronos, # chronos/timer, @@ -211,7 +212,7 @@ suite "Peer Manager": clientPeerStore.setCapacity(0) # And the server's remote peer info contains the node's ENR - serverRemotePeerInfo.enr = some(server.enr) + serverRemotePeerInfo.enr = Opt.some(server.enr) # And the client connects to the server await client.connectToNodes(@[serverRemotePeerInfo]) @@ -360,7 +361,7 @@ suite "Peer Manager": suite "Tracked Peer Metadata": asyncTest "Metadata Recording": # When adding a peer other than self to the peer store - serverRemotePeerInfo.enr = some(server.enr) + serverRemotePeerInfo.enr = Opt.some(server.enr) client.peerManager.addPeer(serverRemotePeerInfo) # Then the peer store should contain the peer @@ -661,7 +662,7 @@ suite "Handling Connections on Different Networks": bindIp: string = "0.0.0.0", extIp: string = "127.0.0.1", indices: seq[uint64] = @[], - recordFlags: Option[CapabilitiesBitfield] = none(CapabilitiesBitfield), + recordFlags: Opt[CapabilitiesBitfield] = Opt.none(CapabilitiesBitfield), bootstrapRecords: seq[waku_enr.Record] = @[], ): (WakuDiscoveryV5, Record) = let @@ -718,7 +719,7 @@ suite "Persistence Check": # Given an on-disk peer db exists, with a peer in it; and two connected nodes let - clientPeerStorage = newTestWakuPeerStorage(some(baseDbPath)) + clientPeerStorage = newTestWakuPeerStorage(Opt.some(baseDbPath)) serverKey = generateSecp256k1Key() clientKey = generateSecp256k1Key() server = newTestWakuNode(serverKey, listenIp, listenPort) @@ -738,7 +739,7 @@ suite "Persistence Check": # When initializing a new client using the prepopulated on-disk storage let - newClientPeerStorage = newTestWakuPeerStorage(some(baseDbPath)) + newClientPeerStorage = newTestWakuPeerStorage(Opt.some(baseDbPath)) newClient = newTestWakuNode( clientKey, listenIp, listenPort, peerStorage = newClientPeerStorage ) @@ -760,7 +761,7 @@ suite "Persistence Check": # When creating a new server with memory storage, and a client with on-disk peer storage let - clientPeerStorage = newTestWakuPeerStorage(some(baseDbPath)) + clientPeerStorage = newTestWakuPeerStorage(Opt.some(baseDbPath)) serverKey = generateSecp256k1Key() clientKey = generateSecp256k1Key() server = newTestWakuNode(serverKey, listenIp, listenPort) diff --git a/tests/node/test_wakunode_relay_rln.nim b/tests/node/test_wakunode_relay_rln.nim index 76074bb6d..93b8e7429 100644 --- a/tests/node/test_wakunode_relay_rln.nim +++ b/tests/node/test_wakunode_relay_rln.nim @@ -1,7 +1,7 @@ {.used.} import - std/[tempfiles, strutils, options], + std/[tempfiles, strutils], results, testutils/unittests, chronos, @@ -75,18 +75,18 @@ proc getWakuRlnConfigOnChain*( rlnRelayEthContractAddress: string, password: string, credIndex: uint, - fatalErrorHandler: Option[OnFatalErrorHandler] = none(OnFatalErrorHandler), - ethClientAddress: Option[string] = none(string), + fatalErrorHandler: Opt[OnFatalErrorHandler] = Opt.none(OnFatalErrorHandler), + ethClientAddress: Opt[string] = Opt.none(string), ): WakuRlnConfig = return WakuRlnConfig( dynamic: true, - credIndex: some(credIndex), + credIndex: Opt.some(credIndex), ethContractAddress: rlnRelayEthContractAddress, ethClientAddress: ethClientAddress.get(EthClient), epochSizeSec: 1, onFatalErrorAction: fatalErrorHandler.get(fatalErrorVoidHandler), # If these are used, initialisation fails with "failed to mount Rln: could not initialize the group manager: the commitment does not have a membership" - creds: some(RlnCreds(path: keystorePath, password: password)), + creds: Opt.some(RlnCreds(path: keystorePath, password: password)), ) proc setupRelayWithOnChainRln*( @@ -205,7 +205,7 @@ suite "Waku RlnRelay - End to End - Static": let contractAddress = await uploadRLNContract(EthClient) let wakuRlnConfig = WakuRlnConfig( dynamic: true, - credIndex: some(0.uint), + credIndex: Opt.some(0.uint), userMessageLimit: 111, ethClientAddress: EthClient, ethContractAddress: $contractAddress, @@ -239,7 +239,7 @@ suite "Waku RlnRelay - End to End - Static": completionFut.complete((topic, msg)) let subscriptionEvent = (kind: PubsubSub, topic: pubsubTopic) - server.subscribe(subscriptionEvent, some(relayHandler)).isOkOr: + server.subscribe(subscriptionEvent, Opt.some(relayHandler)).isOkOr: assert false, "Failed to subscribe to pubsub topic" await sleepAsync(FUTURE_TIMEOUT) @@ -287,14 +287,14 @@ suite "Waku RlnRelay - End to End - Static": raiseAssert "generateRLNProof failed: " & error # When sending the 1B message - discard await client.publish(some(pubsubTopic), message1b) + discard await client.publish(Opt.some(pubsubTopic), message1b) discard await completionFut.withTimeout(FUTURE_TIMEOUT_LONG) # Then the message is relayed check completionFut.read() == (pubsubTopic, message1b) # When sending the 1KiB message completionFut = newPushHandlerFuture() # Reset Future - discard await client.publish(some(pubsubTopic), message1kib) + discard await client.publish(Opt.some(pubsubTopic), message1kib) discard await completionFut.withTimeout(FUTURE_TIMEOUT_LONG) # Then the message is relayed @@ -302,7 +302,7 @@ suite "Waku RlnRelay - End to End - Static": # When sending the 150KiB message completionFut = newPushHandlerFuture() # Reset Future - discard await client.publish(some(pubsubTopic), message150kib) + discard await client.publish(Opt.some(pubsubTopic), message150kib) discard await completionFut.withTimeout(FUTURE_TIMEOUT_LONG) # Then the message is relayed @@ -310,7 +310,7 @@ suite "Waku RlnRelay - End to End - Static": # When sending the 150KiB plus message completionFut = newPushHandlerFuture() # Reset Future - discard await client.publish(some(pubsubTopic), message151kibPlus) + discard await client.publish(Opt.some(pubsubTopic), message151kibPlus) # Then the message is not relayed check not await completionFut.withTimeout(FUTURE_TIMEOUT_LONG) @@ -332,7 +332,7 @@ suite "Waku RlnRelay - End to End - Static": completionFut.complete((topic, msg)) let subscriptionEvent = (kind: PubsubSub, topic: pubsubTopic) - server.subscribe(subscriptionEvent, some(relayHandler)).isOkOr: + server.subscribe(subscriptionEvent, Opt.some(relayHandler)).isOkOr: assert false, "Failed to subscribe to pubsub topic" await sleepAsync(FUTURE_TIMEOUT) @@ -356,7 +356,7 @@ suite "Waku RlnRelay - End to End - Static": # When sending the 150KiB plus message completionFut = newPushHandlerFuture() # Reset Future - discard await client.publish(some(pubsubTopic), message151kibPlus) + discard await client.publish(Opt.some(pubsubTopic), message151kibPlus) # Then the message is not relayed check not await completionFut.withTimeout(FUTURE_TIMEOUT_LONG) @@ -456,7 +456,7 @@ suite "Waku RlnRelay - End to End - OnChain": invalidContractAddress, password, 0, - some(serverFatalErrorHandler), + Opt.some(serverFatalErrorHandler), ) wakuRlnConfig2 = getWakuRlnConfigOnChain( keystorePath, @@ -464,7 +464,7 @@ suite "Waku RlnRelay - End to End - OnChain": invalidContractAddress, password, 1, - some(clientFatalErrorHandler), + Opt.some(clientFatalErrorHandler), ) # Given the node enable Relay and Rln while subscribing to a pubsub topic. @@ -562,8 +562,8 @@ suite "Waku RlnRelay - End to End - OnChain": raiseAssert $error # Test Hack: Monkeypatch the idCredentials into the groupManager - server.rln.groupManager.idCredentials = some(idCredential1) - client.rln.groupManager.idCredentials = some(idCredential2) + server.rln.groupManager.idCredentials = Opt.some(idCredential1) + client.rln.groupManager.idCredentials = Opt.some(idCredential2) except Exception, CatchableError: assert false, "exception raised: " & getCurrentExceptionMsg() diff --git a/tests/node/test_wakunode_restart.nim b/tests/node/test_wakunode_restart.nim index 8d05ce131..f1ed60306 100644 --- a/tests/node/test_wakunode_restart.nim +++ b/tests/node/test_wakunode_restart.nim @@ -1,6 +1,5 @@ {.used.} -import std/options import testutils/unittests, chronos, chronicles import libp2p/switch diff --git a/tests/node/test_wakunode_sharding.nim b/tests/node/test_wakunode_sharding.nim index d1b19c361..25227efa0 100644 --- a/tests/node/test_wakunode_sharding.nim +++ b/tests/node/test_wakunode_sharding.nim @@ -1,6 +1,6 @@ {.used.} -import std/[options, sequtils, tempfiles], testutils/unittests, chronos, chronicles +import results, std/[sequtils, tempfiles], testutils/unittests, chronos, chronicles import std/[sequtils, tempfiles], @@ -62,7 +62,7 @@ suite "Sharding": # When the client publishes a message in the subscribed topic discard await client.publish( - some(topic), + Opt.some(topic), WakuMessage(payload: "message1".toBytes(), contentTopic: "contentTopic"), ) @@ -78,7 +78,7 @@ suite "Sharding": serverHandler.reset() clientHandler.reset() discard await server.publish( - some(topic), + Opt.some(topic), WakuMessage(payload: "message2".toBytes(), contentTopic: "contentTopic"), ) @@ -107,7 +107,7 @@ suite "Sharding": # When a message is published in the server's subscribed topic discard await client.publish( - some(topic1), + Opt.some(topic1), WakuMessage(payload: "message1".toBytes(), contentTopic: contentTopic), ) let @@ -123,7 +123,7 @@ suite "Sharding": clientHandler.reset() let wakuMessage2 = WakuMessage(payload: "message2".toBytes(), contentTopic: contentTopic) - discard await server.publish(some(topic2), wakuMessage2) + discard await server.publish(Opt.some(topic2), wakuMessage2) let serverResult2 = await serverHandler.waitForResult(FUTURE_TIMEOUT) clientResult2 = await clientHandler.waitForResult(FUTURE_TIMEOUT) @@ -149,7 +149,7 @@ suite "Sharding": # When the client publishes a message discard await client.publish( - some(pubsubTopic), + Opt.some(pubsubTopic), WakuMessage(payload: "message1".toBytes(), contentTopic: contentTopicShort), ) let @@ -164,7 +164,7 @@ suite "Sharding": serverHandler.reset() clientHandler.reset() discard await server.publish( - some(pubsubTopic), + Opt.some(pubsubTopic), WakuMessage(payload: "message2".toBytes(), contentTopic: contentTopicFull), ) let @@ -194,7 +194,7 @@ suite "Sharding": # When the server publishes a message in the server's subscribed topic discard await server.publish( - some(shard1), + Opt.some(shard1), WakuMessage(payload: "message1".toBytes(), contentTopic: contentTopic1), ) let @@ -209,7 +209,7 @@ suite "Sharding": serverHandler.reset() clientHandler.reset() discard await client.publish( - some(shard2), + Opt.some(shard2), WakuMessage(payload: "message2".toBytes(), contentTopic: contentTopic2), ) let @@ -234,7 +234,7 @@ suite "Sharding": # When the client publishes a message discard await client.publish( - some(pubsubTopic), + Opt.some(pubsubTopic), WakuMessage(payload: "message1".toBytes(), contentTopic: "myContentTopic"), ) let @@ -261,7 +261,7 @@ suite "Sharding": pubsubTopic = "/waku/2/rs/0/1" contentTopic = "myContentTopic" subscribeResponse = await client.filterSubscribe( - some(pubsubTopic), + Opt.some(pubsubTopic), @[contentTopic], server.switch.peerInfo.toRemotePeerInfo(), ) @@ -293,7 +293,7 @@ suite "Sharding": msg = WakuMessage(payload: "message".toBytes(), contentTopic: "myContentTopic") lightpublishRespnse = await client.legacyLightpushPublish( - some(topic), msg, server.switch.peerInfo.toRemotePeerInfo() + Opt.some(topic), msg, server.switch.peerInfo.toRemotePeerInfo() ) # Then the client receives the message @@ -315,7 +315,7 @@ suite "Sharding": # When the client publishes a message discard await client.publish( - some(pubsubTopic), + Opt.some(pubsubTopic), WakuMessage(payload: "message1".toBytes(), contentTopic: contentTopicShort), ) let @@ -330,7 +330,7 @@ suite "Sharding": serverHandler.reset() clientHandler.reset() discard await server.publish( - some(pubsubTopic), + Opt.some(pubsubTopic), WakuMessage(payload: "message2".toBytes(), contentTopic: contentTopicFull), ) let @@ -358,7 +358,7 @@ suite "Sharding": contentTopicFull = "/0/toychat/2/huilong/proto" pubsubTopic = "/waku/2/rs/0/58355" subscribeResponse1 = await client.filterSubscribe( - some(pubsubTopic), + Opt.some(pubsubTopic), @[contentTopicShort], server.switch.peerInfo.toRemotePeerInfo(), ) @@ -381,7 +381,7 @@ suite "Sharding": unsubscribeResponse = await client.filterUnsubscribeAll(server.switch.peerInfo.toRemotePeerInfo()) subscribeResponse2 = await client.filterSubscribe( - some(pubsubTopic), + Opt.some(pubsubTopic), @[contentTopicFull], server.switch.peerInfo.toRemotePeerInfo(), ) @@ -418,7 +418,7 @@ suite "Sharding": msg = WakuMessage(payload: "message".toBytes(), contentTopic: contentTopicFull) lightpublishRespnse = await client.legacyLightpushPublish( - some(pubsubTopic), msg, server.switch.peerInfo.toRemotePeerInfo() + Opt.some(pubsubTopic), msg, server.switch.peerInfo.toRemotePeerInfo() ) # Then the client receives the message @@ -455,13 +455,13 @@ suite "Sharding": storeQuery1 = StoreQueryRequest( contentTopics: @[contentTopicShort], paginationForward: PagingDirection.Forward, - paginationLimit: some(3'u64), + paginationLimit: Opt.some(3'u64), includeData: true, ) storeQuery2 = StoreQueryRequest( contentTopics: @[contentTopicFull], paginationForward: PagingDirection.Forward, - paginationLimit: some(3'u64), + paginationLimit: Opt.some(3'u64), includeData: true, ) @@ -497,7 +497,7 @@ suite "Sharding": # When the client publishes a message in the client's subscribed topic discard await client.publish( - some(pubsubTopic2), + Opt.some(pubsubTopic2), WakuMessage(payload: "message1".toBytes(), contentTopic: contentTopic2), ) let @@ -512,7 +512,7 @@ suite "Sharding": serverHandler.reset() clientHandler.reset() discard await server.publish( - some(pubsubTopic1), + Opt.some(pubsubTopic1), WakuMessage(payload: "message2".toBytes(), contentTopic: contentTopic1), ) let @@ -543,7 +543,7 @@ suite "Sharding": pubsubTopic2 = "/waku/2/rs/0/23286" # Automatically generated from the contentTopic above subscribeResponse1 = await client.filterSubscribe( - some(pubsubTopic1), + Opt.some(pubsubTopic1), @[contentTopic1], server.switch.peerInfo.toRemotePeerInfo(), ) @@ -580,7 +580,7 @@ suite "Sharding": let msg = WakuMessage(payload: "message".toBytes(), contentTopic: contentTopic2) lightpublishRespnse = await client.legacyLightpushPublish( - some(pubsubTopic2), msg, server.switch.peerInfo.toRemotePeerInfo() + Opt.some(pubsubTopic2), msg, server.switch.peerInfo.toRemotePeerInfo() ) # Then the client does not receive the message @@ -620,13 +620,13 @@ suite "Sharding": storeQuery1 = StoreQueryRequest( contentTopics: @[contentTopic1], paginationForward: PagingDirection.Forward, - paginationLimit: some(2'u64), + paginationLimit: Opt.some(2'u64), includeData: true, ) storeQuery2 = StoreQueryRequest( contentTopics: @[contentTopic2], paginationForward: PagingDirection.Forward, - paginationLimit: some(2'u64), + paginationLimit: Opt.some(2'u64), includeData: true, ) @@ -659,7 +659,7 @@ suite "Sharding": # When the client publishes a message in the topic1 discard await client.publish( - some(topic1), + Opt.some(topic1), WakuMessage(payload: "message1".toBytes(), contentTopic: contentTopic), ) @@ -676,7 +676,7 @@ suite "Sharding": clientHandler1.reset() clientHandler2.reset() discard await client.publish( - some(topic2), + Opt.some(topic2), WakuMessage(payload: "message2".toBytes(), contentTopic: contentTopic), ) @@ -705,7 +705,7 @@ suite "Sharding": # When the client publishes a message in contentTopic1 discard await client.publish( - some(pubsubTopic1), + Opt.some(pubsubTopic1), WakuMessage(payload: "message1".toBytes(), contentTopic: contentTopic1), ) @@ -722,7 +722,7 @@ suite "Sharding": clientHandler1.reset() clientHandler2.reset() discard await client.publish( - some(pubsubTopic2), + Opt.some(pubsubTopic2), WakuMessage(payload: "message2".toBytes(), contentTopic: contentTopic2), ) @@ -758,7 +758,7 @@ suite "Sharding": # When the client publishes a message in the topic1 discard await client.publish( - some(pubsubTopic1), + Opt.some(pubsubTopic1), WakuMessage(payload: "message1".toBytes(), contentTopic: contentTopic), ) @@ -783,7 +783,7 @@ suite "Sharding": serverHandler4.reset() clientHandler4.reset() discard await client.publish( - some(pubsubTopic2), + Opt.some(pubsubTopic2), WakuMessage(payload: "message2".toBytes(), contentTopic: contentTopic), ) @@ -808,7 +808,7 @@ suite "Sharding": serverHandler4.reset() clientHandler4.reset() discard await client.publish( - some(pubsubTopic3), + Opt.some(pubsubTopic3), WakuMessage(payload: "message1".toBytes(), contentTopic: contentTopic3), ) @@ -833,7 +833,7 @@ suite "Sharding": serverHandler4.reset() clientHandler4.reset() discard await client.publish( - some(pubsubTopic4), + Opt.some(pubsubTopic4), WakuMessage(payload: "message2".toBytes(), contentTopic: contentTopic4), ) @@ -862,7 +862,7 @@ suite "Sharding": # When the client publishes a message in the topic discard await client.publish( - some(topic), + Opt.some(topic), WakuMessage(payload: "message1".toBytes(), contentTopic: contentTopic), ) @@ -894,7 +894,7 @@ suite "Sharding": let msg1 = WakuMessage(payload: "message1".toBytes(), contentTopic: contentTopic) lightpublishRespnse = await client.legacyLightpushPublish( - some(topic1), msg1, server.switch.peerInfo.toRemotePeerInfo() + Opt.some(topic1), msg1, server.switch.peerInfo.toRemotePeerInfo() ) # Then the server and client receive the message in topic1's handlers, but not in topic2's @@ -912,7 +912,7 @@ suite "Sharding": let msg2 = WakuMessage(payload: "message2".toBytes(), contentTopic: contentTopic) lightpublishResponse2 = await client.legacyLightpushPublish( - some(topic2), msg2, server.switch.peerInfo.toRemotePeerInfo() + Opt.some(topic2), msg2, server.switch.peerInfo.toRemotePeerInfo() ) # Then the server and client receive the message in topic2's handlers, but not in topic1's @@ -953,10 +953,10 @@ suite "Sharding": let subscribeResponse1 = await client.filterSubscribe( - some(topic1), @[contentTopic], server.switch.peerInfo.toRemotePeerInfo() + Opt.some(topic1), @[contentTopic], server.switch.peerInfo.toRemotePeerInfo() ) subscribeResponse2 = await client.filterSubscribe( - some(topic2), @[contentTopic], server.switch.peerInfo.toRemotePeerInfo() + Opt.some(topic2), @[contentTopic], server.switch.peerInfo.toRemotePeerInfo() ) assertResultOk(subscribeResponse1) @@ -1008,15 +1008,15 @@ suite "Sharding": # Given one query for each pubsub topic let storeQuery1 = StoreQueryRequest( - pubsubTopic: some(topic1), + pubsubTopic: Opt.some(topic1), paginationForward: PagingDirection.Forward, - paginationLimit: some(2'u64), + paginationLimit: Opt.some(2'u64), includeData: true, ) storeQuery2 = StoreQueryRequest( - pubsubTopic: some(topic2), + pubsubTopic: Opt.some(topic2), paginationForward: PagingDirection.Forward, - paginationLimit: some(2'u64), + paginationLimit: Opt.some(2'u64), includeData: true, ) diff --git a/tests/node/test_wakunode_store.nim b/tests/node/test_wakunode_store.nim index b0dc3fc28..f16a36e9d 100644 --- a/tests/node/test_wakunode_store.nim +++ b/tests/node/test_wakunode_store.nim @@ -1,6 +1,6 @@ {.used.} -import std/[options, sequtils, sets], testutils/unittests, chronos, libp2p/crypto/crypto +import results, std/[sequtils, sets], testutils/unittests, chronos, libp2p/crypto/crypto import logos_delivery/waku/[ @@ -52,17 +52,17 @@ suite "Waku Store - End to End - Sorted Archive": archiveMessages = messages.mapIt( WakuMessageKeyValue( messageHash: computeMessageHash(pubsubTopic, it), - message: some(it), - pubsubTopic: some(pubsubTopic), + message: Opt.some(it), + pubsubTopic: Opt.some(pubsubTopic), ) ) storeQuery = StoreQueryRequest( includeData: true, - pubsubTopic: some(pubsubTopic), + pubsubTopic: Opt.some(pubsubTopic), contentTopics: contentTopicSeq, paginationForward: PagingDirection.Forward, - paginationLimit: some(uint64(5)), + paginationLimit: Opt.some(uint64(5)), ) let @@ -99,11 +99,11 @@ suite "Waku Store - End to End - Sorted Archive": # Given the next query var otherHistoryQuery = StoreQueryRequest( includeData: true, - pubsubTopic: some(pubsubTopic), + pubsubTopic: Opt.some(pubsubTopic), contentTopics: contentTopicSeq, paginationCursor: queryResponse.get().paginationCursor, paginationForward: PagingDirection.FORWARD, - paginationLimit: some(uint64(5)), + paginationLimit: Opt.some(uint64(5)), ) # When making the next history query @@ -129,10 +129,10 @@ suite "Waku Store - End to End - Sorted Archive": var nextHistoryQuery = StoreQueryRequest( includeData: true, paginationCursor: queryResponse.get().paginationCursor, - pubsubTopic: some(pubsubTopic), + pubsubTopic: Opt.some(pubsubTopic), contentTopics: contentTopicSeq, paginationForward: PagingDirection.BACKWARD, - paginationLimit: some(uint64(5)), + paginationLimit: Opt.some(uint64(5)), ) # When making the next history query @@ -146,7 +146,7 @@ suite "Waku Store - End to End - Sorted Archive": suite "Pagination with Differente Page Sizes": asyncTest "Pagination with Small Page Size": # Given the first query (1/5) - storeQuery.paginationLimit = some(uint64(2)) + storeQuery.paginationLimit = Opt.some(uint64(2)) # When making a history query let queryResponse1 = await client.query(storeQuery, serverRemotePeerInfo) @@ -159,10 +159,10 @@ suite "Waku Store - End to End - Sorted Archive": let historyQuery2 = StoreQueryRequest( includeData: true, paginationCursor: queryResponse1.get().paginationCursor, - pubsubTopic: some(pubsubTopic), + pubsubTopic: Opt.some(pubsubTopic), contentTopics: contentTopicSeq, paginationForward: PagingDirection.FORWARD, - paginationLimit: some(uint64(2)), + paginationLimit: Opt.some(uint64(2)), ) # When making the next history query @@ -176,10 +176,10 @@ suite "Waku Store - End to End - Sorted Archive": let historyQuery3 = StoreQueryRequest( includeData: true, paginationCursor: queryResponse2.get().paginationCursor, - pubsubTopic: some(pubsubTopic), + pubsubTopic: Opt.some(pubsubTopic), contentTopics: contentTopicSeq, paginationForward: PagingDirection.FORWARD, - paginationLimit: some(uint64(2)), + paginationLimit: Opt.some(uint64(2)), ) # When making the next history query @@ -193,10 +193,10 @@ suite "Waku Store - End to End - Sorted Archive": let historyQuery4 = StoreQueryRequest( includeData: true, paginationCursor: queryResponse3.get().paginationCursor, - pubsubTopic: some(pubsubTopic), + pubsubTopic: Opt.some(pubsubTopic), contentTopics: contentTopicSeq, paginationForward: PagingDirection.FORWARD, - paginationLimit: some(uint64(2)), + paginationLimit: Opt.some(uint64(2)), ) # When making the next history query @@ -210,10 +210,10 @@ suite "Waku Store - End to End - Sorted Archive": let historyQuery5 = StoreQueryRequest( includeData: true, paginationCursor: queryResponse4.get().paginationCursor, - pubsubTopic: some(pubsubTopic), + pubsubTopic: Opt.some(pubsubTopic), contentTopics: contentTopicSeq, paginationForward: PagingDirection.FORWARD, - paginationLimit: some(uint64(2)), + paginationLimit: Opt.some(uint64(2)), ) # When making the next history query @@ -225,7 +225,7 @@ suite "Waku Store - End to End - Sorted Archive": asyncTest "Pagination with Large Page Size": # Given the first query (1/2) - storeQuery.paginationLimit = some(uint64(8)) + storeQuery.paginationLimit = Opt.some(uint64(8)) # When making a history query let queryResponse1 = await client.query(storeQuery, serverRemotePeerInfo) @@ -238,10 +238,10 @@ suite "Waku Store - End to End - Sorted Archive": let historyQuery2 = StoreQueryRequest( includeData: true, paginationCursor: queryResponse1.get().paginationCursor, - pubsubTopic: some(pubsubTopic), + pubsubTopic: Opt.some(pubsubTopic), contentTopics: contentTopicSeq, paginationForward: PagingDirection.FORWARD, - paginationLimit: some(uint64(8)), + paginationLimit: Opt.some(uint64(8)), ) # When making the next history query @@ -253,7 +253,7 @@ suite "Waku Store - End to End - Sorted Archive": asyncTest "Pagination with Excessive Page Size": # Given the first query (1/1) - storeQuery.paginationLimit = some(uint64(100)) + storeQuery.paginationLimit = Opt.some(uint64(100)) # When making a history query let queryResponse1 = await client.query(storeQuery, serverRemotePeerInfo) @@ -264,7 +264,7 @@ suite "Waku Store - End to End - Sorted Archive": asyncTest "Pagination with Mixed Page Size": # Given the first query (1/3) - storeQuery.paginationLimit = some(uint64(2)) + storeQuery.paginationLimit = Opt.some(uint64(2)) # When making a history query let queryResponse1 = await client.query(storeQuery, serverRemotePeerInfo) @@ -277,10 +277,10 @@ suite "Waku Store - End to End - Sorted Archive": let historyQuery2 = StoreQueryRequest( includeData: true, paginationCursor: queryResponse1.get().paginationCursor, - pubsubTopic: some(pubsubTopic), + pubsubTopic: Opt.some(pubsubTopic), contentTopics: contentTopicSeq, paginationForward: PagingDirection.FORWARD, - paginationLimit: some(uint64(4)), + paginationLimit: Opt.some(uint64(4)), ) # When making the next history query @@ -294,10 +294,10 @@ suite "Waku Store - End to End - Sorted Archive": let historyQuery3 = StoreQueryRequest( includeData: true, paginationCursor: queryResponse2.get().paginationCursor, - pubsubTopic: some(pubsubTopic), + pubsubTopic: Opt.some(pubsubTopic), contentTopics: contentTopicSeq, paginationForward: PagingDirection.FORWARD, - paginationLimit: some(uint64(6)), + paginationLimit: Opt.some(uint64(6)), ) # When making the next history query @@ -331,13 +331,13 @@ suite "Waku Store - End to End - Sorted Archive": extraMessages.mapIt( WakuMessageKeyValue( messageHash: computeMessageHash(pubsubTopic, it), - message: some(it), - pubsubTopic: some(pubsubTopic), + message: Opt.some(it), + pubsubTopic: Opt.some(pubsubTopic), ) ) # Given the a query with zero page size (1/2) - storeQuery.paginationLimit = none(uint64) + storeQuery.paginationLimit = Opt.none(uint64) # When making a history query let queryResponse1 = await client.query(storeQuery, serverRemotePeerInfo) @@ -350,10 +350,10 @@ suite "Waku Store - End to End - Sorted Archive": let historyQuery2 = StoreQueryRequest( includeData: true, paginationCursor: queryResponse1.get().paginationCursor, - pubsubTopic: some(pubsubTopic), + pubsubTopic: Opt.some(pubsubTopic), contentTopics: contentTopicSeq, paginationForward: PagingDirection.FORWARD, - paginationLimit: none(uint64), + paginationLimit: Opt.none(uint64), ) # When making the next history query @@ -388,15 +388,15 @@ suite "Waku Store - End to End - Sorted Archive": extraMessages.mapIt( WakuMessageKeyValue( messageHash: computeMessageHash(pubsubTopic, it), - message: some(it), - pubsubTopic: some(pubsubTopic), + message: Opt.some(it), + pubsubTopic: Opt.some(pubsubTopic), ) ) # Given a query with default page size (1/2) storeQuery = StoreQueryRequest( includeData: true, - pubsubTopic: some(pubsubTopic), + pubsubTopic: Opt.some(pubsubTopic), contentTopics: contentTopicSeq, paginationForward: PagingDirection.FORWARD, ) @@ -412,7 +412,7 @@ suite "Waku Store - End to End - Sorted Archive": let historyQuery2 = StoreQueryRequest( includeData: true, paginationCursor: queryResponse.get().paginationCursor, - pubsubTopic: some(pubsubTopic), + pubsubTopic: Opt.some(pubsubTopic), contentTopics: contentTopicSeq, paginationForward: PagingDirection.FORWARD, ) @@ -429,8 +429,8 @@ suite "Waku Store - End to End - Sorted Archive": asyncTest "Starting Cursor": # Given a paginationCursor pointing to the first message let paginationCursor = archiveMessages[0].messageHash - storeQuery.paginationCursor = some(paginationCursor) - storeQuery.paginationLimit = some(uint64(1)) + storeQuery.paginationCursor = Opt.some(paginationCursor) + storeQuery.paginationLimit = Opt.some(uint64(1)) # When making a history query let queryResponse = await client.query(storeQuery, serverRemotePeerInfo) @@ -442,8 +442,8 @@ suite "Waku Store - End to End - Sorted Archive": asyncTest "Middle Cursor": # Given a paginationCursor pointing to the middle message1 let paginationCursor = archiveMessages[5].messageHash - storeQuery.paginationCursor = some(paginationCursor) - storeQuery.paginationLimit = some(uint64(1)) + storeQuery.paginationCursor = Opt.some(paginationCursor) + storeQuery.paginationLimit = Opt.some(uint64(1)) # When making a history query let queryResponse = await client.query(storeQuery, serverRemotePeerInfo) @@ -455,8 +455,8 @@ suite "Waku Store - End to End - Sorted Archive": asyncTest "Ending Cursor": # Given a paginationCursor pointing to the last message let paginationCursor = archiveMessages[9].messageHash - storeQuery.paginationCursor = some(paginationCursor) - storeQuery.paginationLimit = some(uint64(1)) + storeQuery.paginationCursor = Opt.some(paginationCursor) + storeQuery.paginationLimit = Opt.some(uint64(1)) # When making a history query let queryResponse = await client.query(storeQuery, serverRemotePeerInfo) @@ -497,10 +497,10 @@ suite "Waku Store - End to End - Sorted Archive": let otherHistoryQuery = StoreQueryRequest( includeData: true, paginationCursor: paginationCursor, - pubsubTopic: some(pubsubTopic), + pubsubTopic: Opt.some(pubsubTopic), contentTopics: contentTopicSeq, paginationForward: PagingDirection.FORWARD, - paginationLimit: some(uint64(5)), + paginationLimit: Opt.some(uint64(5)), ) let otherQueryResponse = await client.query(otherHistoryQuery, otherServerRemotePeerInfo) @@ -532,10 +532,10 @@ suite "Waku Store - End to End - Unsorted Archive": storeQuery = StoreQueryRequest( includeData: true, - pubsubTopic: some(pubsubTopic), + pubsubTopic: Opt.some(pubsubTopic), contentTopics: contentTopicSeq, paginationForward: PagingDirection.FORWARD, - paginationLimit: some(uint64(5)), + paginationLimit: Opt.some(uint64(5)), ) let timeOrigin = now() @@ -554,8 +554,8 @@ suite "Waku Store - End to End - Unsorted Archive": unsortedArchiveMessages = messages.mapIt( WakuMessageKeyValue( messageHash: computeMessageHash(pubsubTopic, it), - message: some(it), - pubsubTopic: some(pubsubTopic), + message: Opt.some(it), + pubsubTopic: Opt.some(pubsubTopic), ) ) @@ -617,10 +617,10 @@ suite "Waku Store - End to End - Unsorted Archive": var historyQuery2 = StoreQueryRequest( includeData: true, paginationCursor: queryResponse.get().paginationCursor, - pubsubTopic: some(pubsubTopic), + pubsubTopic: Opt.some(pubsubTopic), contentTopics: contentTopicSeq, paginationForward: PagingDirection.FORWARD, - paginationLimit: some(uint64(5)), + paginationLimit: Opt.some(uint64(5)), ) # When making the next history query @@ -660,7 +660,7 @@ suite "Waku Store - End to End - Unsorted Archive": cursor = unsortedArchiveMessages[5].messageHash storeQuery.paginationForward = PagingDirection.BACKWARD - storeQuery.paginationCursor = some(cursor) + storeQuery.paginationCursor = Opt.some(cursor) # When making a history query let queryResponse = await client.query(storeQuery, serverRemotePeerInfo) @@ -692,8 +692,8 @@ suite "Waku Store - End to End - Unsorted Archive": cursor = unsortedArchiveMessages[5].messageHash storeQuery.paginationForward = PagingDirection.FORWARD - storeQuery.paginationCursor = some(cursor) - storeQuery.paginationLimit = some(uint64(6)) + storeQuery.paginationCursor = Opt.some(cursor) + storeQuery.paginationLimit = Opt.some(uint64(6)) # When making a history query let queryResponse = await client.query(storeQuery, serverRemotePeerInfo) @@ -749,10 +749,10 @@ suite "Waku Store - End to End - Unsorted Archive without provided Timestamp": storeQuery = StoreQueryRequest( includeData: true, - pubsubTopic: some(pubsubTopic), + pubsubTopic: Opt.some(pubsubTopic), contentTopics: contentTopicSeq, paginationForward: PagingDirection.FORWARD, - paginationLimit: some(uint64(5)), + paginationLimit: Opt.some(uint64(5)), ) let messages = @[ @@ -771,8 +771,8 @@ suite "Waku Store - End to End - Unsorted Archive without provided Timestamp": unsortedArchiveMessages = messages.mapIt( WakuMessageKeyValue( messageHash: computeMessageHash(pubsubTopic, it), - message: some(it), - pubsubTopic: some(pubsubTopic), + message: Opt.some(it), + pubsubTopic: Opt.some(pubsubTopic), ) ) @@ -824,10 +824,10 @@ suite "Waku Store - End to End - Unsorted Archive without provided Timestamp": var historyQuery2 = StoreQueryRequest( includeData: true, paginationCursor: queryResponse.get().paginationCursor, - pubsubTopic: some(pubsubTopic), + pubsubTopic: Opt.some(pubsubTopic), contentTopics: contentTopicSeq, paginationForward: PagingDirection.FORWARD, - paginationLimit: some(uint64(5)), + paginationLimit: Opt.some(uint64(5)), ) # When making the next history query @@ -886,10 +886,10 @@ suite "Waku Store - End to End - Archive with Multiple Topics": storeQuery = StoreQueryRequest( includeData: true, - pubsubTopic: some(pubsubTopic), + pubsubTopic: Opt.some(pubsubTopic), contentTopics: contentTopicSeq, paginationForward: PagingDirection.FORWARD, - paginationLimit: some(uint64(5)), + paginationLimit: Opt.some(uint64(5)), ) let timeOrigin = now() @@ -914,8 +914,8 @@ suite "Waku Store - End to End - Archive with Multiple Topics": archiveMessages = messages.mapIt( WakuMessageKeyValue( messageHash: computeMessageHash(pubsubTopic, it), - message: some(it), - pubsubTopic: some(pubsubTopic), + message: Opt.some(it), + pubsubTopic: Opt.some(pubsubTopic), ) ) @@ -923,7 +923,7 @@ suite "Waku Store - End to End - Archive with Multiple Topics": archiveMessages[i].messagehash = computeMessageHash(pubsubTopicB, archiveMessages[i].message.get()) - archiveMessages[i].pubsubTopic = some(pubsubTopicB) + archiveMessages[i].pubsubTopic = Opt.some(pubsubTopicB) let serverKey = generateSecp256k1Key() @@ -993,10 +993,10 @@ suite "Waku Store - End to End - Archive with Multiple Topics": let historyQuery2 = StoreQueryRequest( includeData: true, paginationCursor: queryResponse.get().paginationCursor, - pubsubTopic: none(PubsubTopic), + pubsubTopic: Opt.none(PubsubTopic), contentTopics: contentTopicSeq, paginationForward: PagingDirection.FORWARD, - paginationLimit: some(uint64(5)), + paginationLimit: Opt.some(uint64(5)), ) # When making the next history query @@ -1019,7 +1019,7 @@ suite "Waku Store - End to End - Archive with Multiple Topics": asyncTest "Special Characters in Content Filtering": # Given a history query with special characters in content filtering - storeQuery.pubsubTopic = some(pubsubTopicB) + storeQuery.pubsubTopic = Opt.some(pubsubTopicB) storeQuery.contentTopics = @["!@#$%^&*()_+"] # When making a history query @@ -1031,7 +1031,7 @@ suite "Waku Store - End to End - Archive with Multiple Topics": asyncTest "PubsubTopic Specified": # Given a history query with pubsub topic specified - storeQuery.pubsubTopic = some(pubsubTopicB) + storeQuery.pubsubTopic = Opt.some(pubsubTopicB) # When making a history query let queryResponse = await client.query(storeQuery, serverRemotePeerInfo) @@ -1048,7 +1048,7 @@ suite "Waku Store - End to End - Archive with Multiple Topics": asyncTest "PubsubTopic Left Empty": # Given a history query with pubsub topic left empty - storeQuery.pubsubTopic = none(PubsubTopic) + storeQuery.pubsubTopic = Opt.none(PubsubTopic) # When making a history query let queryResponse = await client.query(storeQuery, serverRemotePeerInfo) @@ -1061,10 +1061,10 @@ suite "Waku Store - End to End - Archive with Multiple Topics": let historyQuery2 = StoreQueryRequest( includeData: true, paginationCursor: queryResponse.get().paginationCursor, - pubsubTopic: none(PubsubTopic), + pubsubTopic: Opt.none(PubsubTopic), contentTopics: contentTopicSeq, paginationForward: PagingDirection.FORWARD, - paginationLimit: some(uint64(5)), + paginationLimit: Opt.some(uint64(5)), ) # When making the next history query @@ -1077,8 +1077,8 @@ suite "Waku Store - End to End - Archive with Multiple Topics": suite "Validation of Time-based Filtering": asyncTest "Basic Time Filtering": # Given a history query with start and end time - storeQuery.startTime = some(originTs(20)) - storeQuery.endTime = some(originTs(40)) + storeQuery.startTime = Opt.some(originTs(20)) + storeQuery.endTime = Opt.some(originTs(40)) # When making a history query let queryResponse = await client.query(storeQuery, serverRemotePeerInfo) @@ -1090,8 +1090,8 @@ suite "Waku Store - End to End - Archive with Multiple Topics": asyncTest "Only Start Time Specified": # Given a history query with only start time - storeQuery.startTime = some(originTs(20)) - storeQuery.endTime = none(Timestamp) + storeQuery.startTime = Opt.some(originTs(20)) + storeQuery.endTime = Opt.none(Timestamp) # When making a history query let queryResponse = await client.query(storeQuery, serverRemotePeerInfo) @@ -1108,8 +1108,8 @@ suite "Waku Store - End to End - Archive with Multiple Topics": asyncTest "Only End Time Specified": # Given a history query with only end time - storeQuery.startTime = none(Timestamp) - storeQuery.endTime = some(originTs(40)) + storeQuery.startTime = Opt.none(Timestamp) + storeQuery.endTime = Opt.some(originTs(40)) # When making a history query let queryResponse = await client.query(storeQuery, serverRemotePeerInfo) @@ -1127,8 +1127,8 @@ suite "Waku Store - End to End - Archive with Multiple Topics": asyncTest "Invalid Time Range": # Given a history query with invalid time range - storeQuery.startTime = some(originTs(60)) - storeQuery.endTime = some(originTs(40)) + storeQuery.startTime = Opt.some(originTs(60)) + storeQuery.endTime = Opt.some(originTs(40)) # When making a history query let queryResponse = await client.query(storeQuery, serverRemotePeerInfo) @@ -1139,8 +1139,8 @@ suite "Waku Store - End to End - Archive with Multiple Topics": asyncTest "Time Filtering with Content Filtering": # Given a history query with time and content filtering - storeQuery.startTime = some(originTs(20)) - storeQuery.endTime = some(originTs(60)) + storeQuery.startTime = Opt.some(originTs(20)) + storeQuery.endTime = Opt.some(originTs(60)) storeQuery.contentTopics = @[contentTopicC] # When making a history query @@ -1152,8 +1152,8 @@ suite "Waku Store - End to End - Archive with Multiple Topics": asyncTest "Messages Outside of Time Range": # Given a history query with a valid time range which does not contain any messages - storeQuery.startTime = some(originTs(100)) - storeQuery.endTime = some(originTs(200)) + storeQuery.startTime = Opt.some(originTs(100)) + storeQuery.endTime = Opt.some(originTs(200)) # When making a history query let queryResponse = await client.query(storeQuery, serverRemotePeerInfo) @@ -1271,8 +1271,8 @@ suite "Waku Store - End to End - Archive with Multiple Topics": let voluminousArchiveMessages = messages.mapIt( WakuMessageKeyValue( messageHash: computeMessageHash(pubsubTopic, it), - message: some(it), - pubsubTopic: some(pubsubTopic), + message: Opt.some(it), + pubsubTopic: Opt.some(pubsubTopic), ) ) diff --git a/tests/node/utils.nim b/tests/node/utils.nim index e6addf9cf..22964921a 100644 --- a/tests/node/utils.nim +++ b/tests/node/utils.nim @@ -1,5 +1,5 @@ -import std/options, results import + results, logos_delivery/waku/ [node/peer_manager, node/waku_node, waku_enr/sharding, common/enr/typed_record], ../testlib/[wakucore] diff --git a/tests/persistency/test_backend.nim b/tests/persistency/test_backend.nim index d375bf3a4..9ca437466 100644 --- a/tests/persistency/test_backend.nim +++ b/tests/persistency/test_backend.nim @@ -1,8 +1,6 @@ {.used.} -import std/options -import results -import testutils/unittests +import results, testutils/unittests import logos_delivery/waku/persistency/[types, keys, backend_sqlite] template str(b: seq[byte]): string = diff --git a/tests/persistency/test_encoding.nim b/tests/persistency/test_encoding.nim index 4912bdcf1..291616d31 100644 --- a/tests/persistency/test_encoding.nim +++ b/tests/persistency/test_encoding.nim @@ -1,6 +1,6 @@ {.used.} -import std/[algorithm, options, os, times] +import std/[algorithm, os, times] import chronos, results import testutils/unittests import logos_delivery/waku/persistency/persistency @@ -142,7 +142,7 @@ suite "Persistency generic encoding": # Poll for the row, then read it back as raw bytes. let deadline = epochTime() + 1.0 - var got: Option[seq[byte]] + var got: Opt[seq[byte]] while epochTime() < deadline: let r = await job.get("msg", k) check r.isOk diff --git a/tests/persistency/test_facade.nim b/tests/persistency/test_facade.nim index a3af22d91..bf22a96ba 100644 --- a/tests/persistency/test_facade.nim +++ b/tests/persistency/test_facade.nim @@ -1,6 +1,6 @@ {.used.} -import std/[options, os, strutils, times] +import std/[os, strutils, times] import chronos, results import testutils/unittests import logos_delivery/waku/persistency/persistency diff --git a/tests/persistency/test_lifecycle.nim b/tests/persistency/test_lifecycle.nim index 3006672da..1abcdaccb 100644 --- a/tests/persistency/test_lifecycle.nim +++ b/tests/persistency/test_lifecycle.nim @@ -1,6 +1,6 @@ {.used.} -import std/[options, os, times] +import std/[os, times] import chronos, results import testutils/unittests import brokers/[event_broker, request_broker] diff --git a/tests/persistency/test_sds_persistency.nim b/tests/persistency/test_sds_persistency.nim index e5e0654d5..4a955310d 100644 --- a/tests/persistency/test_sds_persistency.nim +++ b/tests/persistency/test_sds_persistency.nim @@ -7,7 +7,7 @@ ## the op is queued, not applied — Persistency v1), so every read-back polls ## until the row appears/disappears. -import std/[options, os, times] +import std/[os, times] import chronos, results import testutils/unittests import logos_delivery/waku/persistency/persistency diff --git a/tests/persistency/test_string_lookup.nim b/tests/persistency/test_string_lookup.nim index 46bbce2b6..b8d1ff7b0 100644 --- a/tests/persistency/test_string_lookup.nim +++ b/tests/persistency/test_string_lookup.nim @@ -1,6 +1,6 @@ {.used.} -import std/[options, os, times] +import std/[os, times] import chronos, results import testutils/unittests import logos_delivery/waku/persistency/persistency diff --git a/tests/test_peer_manager.nim b/tests/test_peer_manager.nim index 1dc42d4ce..e2f5a5a26 100644 --- a/tests/test_peer_manager.nim +++ b/tests/test_peer_manager.nim @@ -1,7 +1,7 @@ {.used.} import - std/[sequtils, times, sugar, net, options], + std/[sequtils, times, sugar, net], results, testutils/unittests, chronos, @@ -379,7 +379,7 @@ procSuite "Peer Manager": let peerInfo2 = node2.switch.peerInfo var remotePeerInfo2 = peerInfo2.toRemotePeerInfo() - remotePeerInfo2.enr = some(node2.enr) + remotePeerInfo2.enr = Opt.some(node2.enr) let is12Connected = await node1.peerManager.connectPeer(remotePeerInfo2) assert is12Connected == true, "Node 1 and 2 not connected" @@ -462,7 +462,7 @@ procSuite "Peer Manager": let peerInfo2 = node2.switch.peerInfo var remotePeerInfo2 = peerInfo2.toRemotePeerInfo() - remotePeerInfo2.enr = some(node2.enr) + remotePeerInfo2.enr = Opt.some(node2.enr) let is12Connected = await node1.peerManager.connectPeer(remotePeerInfo2) assert is12Connected == true, "Node 1 and 2 not connected" @@ -636,7 +636,7 @@ procSuite "Peer Manager": let nodes = toSeq(0 ..< 4).mapIt( newTestWakuNode( nodeKey = generateSecp256k1Key(), - wakuFlags = some(CapabilitiesBitfield.init(@[Relay])), + wakuFlags = Opt.some(CapabilitiesBitfield.init(@[Relay])), ) ) @@ -649,7 +649,7 @@ procSuite "Peer Manager": let peerInfos = collect: for i in 0 .. nodes.high: let peerInfo = nodes[i].switch.peerInfo.toRemotePeerInfo() - peerInfo.enr = some(nodes[i].enr) + peerInfo.enr = Opt.some(nodes[i].enr) peerInfo # Add all peers (but self) to node 0 @@ -707,7 +707,7 @@ procSuite "Peer Manager": let nodes = toSeq(0 ..< 4).mapIt( newTestWakuNode( nodeKey = generateSecp256k1Key(), - wakuFlags = some(CapabilitiesBitfield.init(@[Relay])), + wakuFlags = Opt.some(CapabilitiesBitfield.init(@[Relay])), ) ) @@ -729,7 +729,7 @@ procSuite "Peer Manager": let peerInfos = collect: for i in 0 .. nodes.high: let peerInfo = nodes[i].switch.peerInfo.toRemotePeerInfo() - peerInfo.enr = some(nodes[i].enr) + peerInfo.enr = Opt.some(nodes[i].enr) peerInfo # Add all peers (but self) to node 0 @@ -1322,7 +1322,7 @@ procSuite "Peer Manager": let peerInfos = collect: for node in nodes: var peerInfo = node.switch.peerInfo.toRemotePeerInfo() - peerInfo.enr = some(node.enr) + peerInfo.enr = Opt.some(node.enr) peerInfo # Add all peers to node 0's peer manager and peerstore @@ -1334,7 +1334,7 @@ procSuite "Peer Manager": @[WakuRelayCodec] ## When: We select a peer for shard 0 - let shard0Topic = some(PubsubTopic("/waku/2/rs/0/0")) + let shard0Topic = Opt.some(PubsubTopic("/waku/2/rs/0/0")) let selectedPeer0 = nodes[0].peerManager.selectPeer(WakuRelayCodec, shard0Topic) ## Then: Only peers supporting shard 0 are considered (nodes 2, not node 1) @@ -1344,7 +1344,7 @@ procSuite "Peer Manager": selectedPeer0.get().peerId == peerInfos[2].peerId # node2 has shard 0 ## When: We select a peer for shard 1 - let shard1Topic = some(PubsubTopic("/waku/2/rs/0/1")) + let shard1Topic = Opt.some(PubsubTopic("/waku/2/rs/0/1")) let selectedPeer1 = nodes[0].peerManager.selectPeer(WakuRelayCodec, shard1Topic) ## Then: Only peer with shard 1 is selected @@ -1397,7 +1397,7 @@ procSuite "Peer Manager": pm.switch.peerStore.setShardInfo(peerInfo.peerId, peerInfo.shards) ## When: We select a peer for shard 0 - let shard0Topic = some(PubsubTopic("/waku/2/rs/0/0")) + let shard0Topic = Opt.some(PubsubTopic("/waku/2/rs/0/0")) let selectedPeer0 = pm.selectPeer(WakuRelayCodec, shard0Topic) ## Then: Peers with shard 0 in shards field are selected @@ -1406,7 +1406,7 @@ procSuite "Peer Manager": selectedPeer0.get().peerId in [peerInfos[0].peerId, peerInfos[2].peerId] ## When: We select a peer for shard 1 - let shard1Topic = some(PubsubTopic("/waku/2/rs/0/1")) + let shard1Topic = Opt.some(PubsubTopic("/waku/2/rs/0/1")) let selectedPeer1 = pm.selectPeer(WakuRelayCodec, shard1Topic) ## Then: Peer with shard 1 in shards field is selected @@ -1426,19 +1426,19 @@ procSuite "Peer Manager": discard await peer.mountRelay() var peerInfo = peer.switch.peerInfo.toRemotePeerInfo() - peerInfo.enr = some(peer.enr) + peerInfo.enr = Opt.some(peer.enr) node.peerManager.addPeer(peerInfo) node.peerManager.switch.peerStore[ProtoBook][peerInfo.peerId] = @[WakuRelayCodec] ## When: selectPeer is called with malformed pubsub topic let invalidTopics = @[ - some(PubsubTopic("invalid-topic")), - some(PubsubTopic("/waku/2/invalid")), - some(PubsubTopic("/waku/2/rs/abc/0")), # non-numeric cluster - some(PubsubTopic("")), # empty topic + Opt.some(PubsubTopic("invalid-topic")), + Opt.some(PubsubTopic("/waku/2/invalid")), + Opt.some(PubsubTopic("/waku/2/rs/abc/0")), # non-numeric cluster + Opt.some(PubsubTopic("")), # empty topic ] - ## Then: Returns none(RemotePeerInfo) without crashing + ## Then: Returns Opt.none(RemotePeerInfo) without crashing for invalidTopic in invalidTopics: let result = node.peerManager.selectPeer(WakuRelayCodec, invalidTopic) check: @@ -1468,7 +1468,7 @@ procSuite "Peer Manager": # Create peer info with ENR (shard 0) but set shards field to shard 1 var peerInfo = peer.switch.peerInfo.toRemotePeerInfo() - peerInfo.enr = some(peer.enr) # ENR has shard 0 + peerInfo.enr = Opt.some(peer.enr) # ENR has shard 0 peerInfo.shards = @[shardId1] # shards field has shard 1 node.peerManager.addPeer(peerInfo) @@ -1477,7 +1477,7 @@ procSuite "Peer Manager": node.peerManager.switch.peerStore.setShardInfo(peerInfo.peerId, peerInfo.shards) ## When: We select for shard 0 - let shard0Topic = some(PubsubTopic("/waku/2/rs/0/0")) + let shard0Topic = Opt.some(PubsubTopic("/waku/2/rs/0/0")) let selectedPeer = node.peerManager.selectPeer(WakuRelayCodec, shard0Topic) ## Then: Peer is selected because ENR (shard 0) takes precedence @@ -1486,7 +1486,7 @@ procSuite "Peer Manager": selectedPeer.get().peerId == peerInfo.peerId ## When: We select for shard 1 - let shard1Topic = some(PubsubTopic("/waku/2/rs/0/1")) + let shard1Topic = Opt.some(PubsubTopic("/waku/2/rs/0/1")) let selectedPeer1 = node.peerManager.selectPeer(WakuRelayCodec, shard1Topic) ## Then: Peer is still selected because shards field is checked as fallback diff --git a/tests/test_peer_storage.nim b/tests/test_peer_storage.nim index 123556b45..be2a3657a 100644 --- a/tests/test_peer_storage.nim +++ b/tests/test_peer_storage.nim @@ -1,6 +1,6 @@ {.used.} -import std/options, testutils/unittests, eth/p2p/discoveryv5/enr, libp2p/crypto/crypto +import results, testutils/unittests, eth/p2p/discoveryv5/enr, libp2p/crypto/crypto import logos_delivery/waku/[ common/databases/db_sqlite, @@ -33,7 +33,7 @@ suite "Peer Storage": let stored = RemotePeerInfo( peerId: peer.peerId, addrs: @[peerLoc], - enr: some(record), + enr: Opt.some(record), protocols: @[peerProto], publicKey: peerKey.getPublicKey().tryGet(), connectedness: connectedness, @@ -75,7 +75,7 @@ suite "Peer Storage": # Test replace and retrieve (update an existing entry) stored.connectedness = CannotConnect stored.disconnectTime = disconn + 10 - stored.enr = none(Record) + stored.enr = Opt.none(Record) require storage.put(stored).isOk responseCount = 0 diff --git a/tests/test_relay_peer_exchange.nim b/tests/test_relay_peer_exchange.nim index 058576d4c..95c13f39d 100644 --- a/tests/test_relay_peer_exchange.nim +++ b/tests/test_relay_peer_exchange.nim @@ -1,7 +1,8 @@ {.used.} import - std/[sequtils, options], + results, + std/sequtils, testutils/unittests, chronos, libp2p/peerid, @@ -28,7 +29,7 @@ procSuite "Relay (GossipSub) Peer Exchange": # When both client and server mount relay without a handler (await node1.mountRelay()).isOkOr: assert false, "Failed to mount relay" - (await node2.mountRelay(none(RoutingRecordsHandler))).isOkOr: + (await node2.mountRelay(Opt.none(RoutingRecordsHandler))).isOkOr: assert false, "Failed to mount relay" # Then the relays are mounted without a handler @@ -78,11 +79,11 @@ procSuite "Relay (GossipSub) Peer Exchange": peerExchangeHandle: RoutingRecordsHandler = peerExchangeHandler # Givem the nodes mount relay with a peer exchange handler - (await node1.mountRelay(some(emptyPeerExchangeHandle))).isOkOr: + (await node1.mountRelay(Opt.some(emptyPeerExchangeHandle))).isOkOr: assert false, "Failed to mount relay" - (await node2.mountRelay(some(emptyPeerExchangeHandle))).isOkOr: + (await node2.mountRelay(Opt.some(emptyPeerExchangeHandle))).isOkOr: assert false, "Failed to mount relay" - (await node3.mountRelay(some(peerExchangeHandle))).isOkOr: + (await node3.mountRelay(Opt.some(peerExchangeHandle))).isOkOr: assert false, "Failed to mount relay" # Ensure that node1 prunes all peers after the first connection diff --git a/tests/test_waku.nim b/tests/test_waku.nim index 7ddde8ad9..300a97417 100644 --- a/tests/test_waku.nim +++ b/tests/test_waku.nim @@ -1,6 +1,6 @@ {.used.} -import std/[net, options] +import results, std/net import chronos, testutils/unittests @@ -14,7 +14,7 @@ suite "LogosDelivery API - Create node": ## Given var nodeConf = MessagingClientConf().toWakuNodeConf(Core).valueOr: raiseAssert "toWakuNodeConf failed: " & error - nodeConf.clusterId = some(3'u16) + nodeConf.clusterId = Opt.some(3'u16) nodeConf.rest = false # This is the actual minimal config but as the node auto-start, it is not suitable for tests @@ -33,7 +33,7 @@ suite "LogosDelivery API - Create node": ## Given var nodeConf = MessagingClientConf().toWakuNodeConf(Core).valueOr: raiseAssert "toWakuNodeConf failed: " & error - nodeConf.clusterId = some(99'u16) + nodeConf.clusterId = Opt.some(99'u16) nodeConf.rest = false nodeConf.numShardsInNetwork = 16 nodeConf.maxMessageSize = "1024 KiB" @@ -64,7 +64,7 @@ suite "LogosDelivery API - Create node": ## Given var nodeConf = MessagingClientConf().toWakuNodeConf(Core).valueOr: raiseAssert "toWakuNodeConf failed: " & error - nodeConf.clusterId = some(42'u16) + nodeConf.clusterId = Opt.some(42'u16) nodeConf.rest = false nodeConf.entryNodes = @[ "enrtree://AIRVQ5DDA4FFWLRBCHJWUWOO6X6S4ZTZ5B667LQ6AJU6PEYDLRD5O@sandbox.waku.nodes.status.im", diff --git a/tests/test_waku_enr.nim b/tests/test_waku_enr.nim index 5b1688682..0858f6461 100644 --- a/tests/test_waku_enr.nim +++ b/tests/test_waku_enr.nim @@ -1,6 +1,6 @@ {.used.} -import std/[options, sequtils], results, testutils/unittests +import std/sequtils, results, testutils/unittests import logos_delivery/waku/waku_core, logos_delivery/waku/waku_enr, ./testlib/wakucore suite "Waku ENR - Capabilities bitfield": diff --git a/tests/test_waku_metadata.nim b/tests/test_waku_metadata.nim index 1ae4ce7b7..d913f0919 100644 --- a/tests/test_waku_metadata.nim +++ b/tests/test_waku_metadata.nim @@ -1,7 +1,7 @@ {.used.} import - std/[options, sequtils, tables], + std/[sequtils, tables], testutils/unittests, chronos, chronicles, diff --git a/tests/test_waku_netconfig.nim b/tests/test_waku_netconfig.nim index 08d153ee7..91928927c 100644 --- a/tests/test_waku_netconfig.nim +++ b/tests/test_waku_netconfig.nim @@ -1,4 +1,4 @@ -import std/options +import results {.used.} import chronos, confutils/toml/std/net, libp2p/multiaddress, testutils/unittests @@ -24,23 +24,23 @@ suite "Waku NetConfig": let netConfigRes = NetConfig.init( bindIp = conf.endpointConf.p2pListenAddress, bindPort = conf.endpointConf.p2pTcpPort, - extIp = none(IpAddress), - extPort = none(Port), + extIp = Opt.none(IpAddress), + extPort = Opt.none(Port), extMultiAddrs = @[], wsBindPort = if conf.webSocketConf.isSome(): - some(conf.webSocketConf.get().port) + Opt.some(conf.webSocketConf.get().port) else: - none(Port), + Opt.none(Port), wsEnabled = conf.webSocketConf.isSome(), wssEnabled = if conf.webSocketConf.isSome(): conf.webSocketConf.get().secureConf.isSome() else: false, - dns4DomainName = none(string), - discv5UdpPort = none(Port), - wakuFlags = some(wakuFlags), + dns4DomainName = Opt.none(string), + discv5UdpPort = Opt.none(Port), + wakuFlags = Opt.some(wakuFlags), ) check: @@ -76,8 +76,8 @@ suite "Waku NetConfig": let netConfigRes = NetConfig.init( bindIp = conf.endpointConf.p2pListenAddress, bindPort = conf.endpointConf.p2pTcpPort, - extIp = some(extIp), - extPort = some(extPort), + extIp = Opt.some(extIp), + extPort = Opt.some(extPort), ) assert netConfigRes.isOk(), $netConfigRes.error @@ -97,8 +97,8 @@ suite "Waku NetConfig": let netConfigRes = NetConfig.init( bindIp = conf.endpointConf.p2pListenAddress, bindPort = conf.endpointConf.p2pTcpPort, - dns4DomainName = some(dns4DomainName), - extPort = some(extPort), + dns4DomainName = Opt.some(dns4DomainName), + extPort = Opt.some(extPort), ) assert netConfigRes.isOk(), $netConfigRes.error @@ -141,7 +141,7 @@ suite "Waku NetConfig": bindIp = conf.endpointConf.p2pListenAddress, bindPort = bindPort, quicEnabled = true, - quicBindPort = some(bindPort), + quicBindPort = Opt.some(bindPort), ) assert autoRes.isOk(), $autoRes.error check autoRes.get().announcedAddresses.filterIt(it.isQuicAddress()).len == 1 @@ -151,7 +151,7 @@ suite "Waku NetConfig": bindIp = conf.endpointConf.p2pListenAddress, bindPort = bindPort, quicEnabled = true, - quicBindPort = some(bindPort), + quicBindPort = Opt.some(bindPort), extMultiAddrs = @[operatorQuic], ) assert opRes.isOk(), $opRes.error @@ -170,11 +170,11 @@ suite "Waku NetConfig": let netConfigRes = NetConfig.init( bindIp = conf.endpointConf.p2pListenAddress, bindPort = conf.endpointConf.p2pTcpPort, - extIp = some(extIp), - extPort = some(Port(1234)), + extIp = Opt.some(extIp), + extPort = Opt.some(Port(1234)), quicEnabled = true, - quicBindPort = some(quicBindPort), - extQuicPort = some(natQuicPort), + quicBindPort = Opt.some(quicBindPort), + extQuicPort = Opt.some(natQuicPort), ) assert netConfigRes.isOk(), $netConfigRes.error @@ -194,9 +194,9 @@ suite "Waku NetConfig": let netConfigRes = NetConfig.init( bindIp = conf.endpointConf.p2pListenAddress, bindPort = conf.endpointConf.p2pTcpPort, - dns4DomainName = some(dns4DomainName), - extIp = some(extIp), - extPort = some(extPort), + dns4DomainName = Opt.some(dns4DomainName), + extIp = Opt.some(extIp), + extPort = Opt.some(extPort), ) assert netConfigRes.isOk(), $netConfigRes.error @@ -217,8 +217,8 @@ suite "Waku NetConfig": let netConfigRes = NetConfig.init( bindIp = conf.endpointConf.p2pListenAddress, bindPort = conf.endpointConf.p2pTcpPort, - dns4DomainName = some(dns4DomainName), - extPort = some(extPort), + dns4DomainName = Opt.some(dns4DomainName), + extPort = Opt.some(extPort), extMultiAddrs = @[dns4Address], ) @@ -301,8 +301,8 @@ suite "Waku NetConfig": let netConfigRes = NetConfig.init( bindIp = conf.endpointConf.p2pListenAddress, bindPort = conf.endpointConf.p2pTcpPort, - extIp = some(extIp), - extPort = some(extPort), + extIp = Opt.some(extIp), + extPort = Opt.some(extPort), wsEnabled = true, wssEnabled = wssEnabled, ) @@ -332,8 +332,8 @@ suite "Waku NetConfig": let netConfigRes = NetConfig.init( bindIp = conf.endpointConf.p2pListenAddress, bindPort = conf.endpointConf.p2pTcpPort, - dns4DomainName = some(dns4DomainName), - extPort = some(extPort), + dns4DomainName = Opt.some(dns4DomainName), + extPort = Opt.some(extPort), wsEnabled = true, wssEnabled = wssEnabled, ) @@ -366,9 +366,9 @@ suite "Waku NetConfig": let netConfigRes = NetConfig.init( bindIp = conf.endpointConf.p2pListenAddress, bindPort = conf.endpointConf.p2pTcpPort, - dns4DomainName = some(dns4DomainName), - extIp = some(extIp), - extPort = some(extPort), + dns4DomainName = Opt.some(dns4DomainName), + extIp = Opt.some(extIp), + extPort = Opt.some(extPort), wsEnabled = true, wssEnabled = wssEnabled, ) @@ -410,8 +410,8 @@ suite "Waku NetConfig": let netConfigRes = NetConfig.init( bindIp = conf.endpointConf.p2pListenAddress, bindPort = conf.endpointConf.p2pTcpPort, - extIp = some(extIp), - extPort = some(extPort), + extIp = Opt.some(extIp), + extPort = Opt.some(extPort), ) assert netConfigRes.isOk(), $netConfigRes.error @@ -431,8 +431,8 @@ suite "Waku NetConfig": let netConfigRes = NetConfig.init( bindIp = conf.endpointConf.p2pListenAddress, bindPort = conf.endpointConf.p2pTcpPort, - dns4DomainName = some(dns4DomainName), - extPort = some(extPort), + dns4DomainName = Opt.some(dns4DomainName), + extPort = Opt.some(extPort), ) assert netConfigRes.isOk(), $netConfigRes.error @@ -496,7 +496,7 @@ suite "Waku NetConfig": bindIp = conf.endpointConf.p2pListenAddress, bindPort = conf.endpointConf.p2pTcpPort, quicEnabled = true, - quicBindPort = some(Port(60000)), + quicBindPort = Opt.some(Port(60000)), extMultiAddrs = extMultiAddrs, extMultiAddrsOnly = true, ) diff --git a/tests/test_waku_protobufs.nim b/tests/test_waku_protobufs.nim index d893f0fde..5902b46b4 100644 --- a/tests/test_waku_protobufs.nim +++ b/tests/test_waku_protobufs.nim @@ -1,6 +1,6 @@ {.used.} -import std/[options, sequtils, tables], testutils/unittests, chronos, chronicles +import results, std/[sequtils, tables], testutils/unittests, chronos, chronicles import logos_delivery/waku/waku_metadata, logos_delivery/waku/waku_metadata/rpc, @@ -11,7 +11,7 @@ procSuite "Waku Protobufs": # TODO: Missing test coverage in many encode/decode protobuf functions test "WakuMetadataResponse": - let res = WakuMetadataResponse(clusterId: some(7), shards: @[10, 23, 33]) + let res = WakuMetadataResponse(clusterId: Opt.some(7), shards: @[10, 23, 33]) let buffer = res.encode() @@ -22,7 +22,7 @@ procSuite "Waku Protobufs": decodedBuff.get().shards == res.shards test "WakuMetadataRequest": - let req = WakuMetadataRequest(clusterId: some(5), shards: @[100, 2, 0]) + let req = WakuMetadataRequest(clusterId: Opt.some(5), shards: @[100, 2, 0]) let buffer = req.encode() diff --git a/tests/test_waku_rendezvous.nim b/tests/test_waku_rendezvous.nim index 4bdb90630..1dd3d3a88 100644 --- a/tests/test_waku_rendezvous.nim +++ b/tests/test_waku_rendezvous.nim @@ -1,11 +1,7 @@ {.used.} import - std/options, - chronos, - testutils/unittests, - libp2p/builders, - libp2p/protocols/rendezvous + results, chronos, testutils/unittests, libp2p/builders, libp2p/protocols/rendezvous import logos_delivery/waku/waku_core/peers, diff --git a/tests/test_wakunode.nim b/tests/test_wakunode.nim index 4279d9066..a607c9f2c 100644 --- a/tests/test_wakunode.nim +++ b/tests/test_wakunode.nim @@ -1,7 +1,8 @@ {.used.} import - std/[sequtils, strutils, net, options], + results, + std/[sequtils, strutils, net], stew/byteutils, testutils/unittests, chronicles, @@ -77,7 +78,7 @@ suite "WakuNode": assert false, "Failed to subscribe to topic" await sleepAsync(2000.millis) - var res = await node1.publish(some($shard), message) + var res = await node1.publish(Opt.some($shard), message) assert res.isOk(), $res.error await sleepAsync(2000.millis) @@ -180,8 +181,8 @@ suite "WakuNode": nodeKey = generateSecp256k1Key() bindIp = parseIpAddress("0.0.0.0") bindPort = Port(61006) - extIp = some(getPrimaryIPAddr()) - extPort = some(Port(61008)) + extIp = Opt.some(getPrimaryIPAddr()) + extPort = Opt.some(Port(61008)) # tcp-only: asserts exact single listen addr; quic variant below node = newTestWakuNode(nodeKey, bindIp, bindPort, extIp, extPort, quicEnabled = false) @@ -219,8 +220,8 @@ suite "WakuNode": nodeKey = generateSecp256k1Key() bindIp = parseIpAddress("0.0.0.0") bindPort = Port(0) - extIp = some(getPrimaryIPAddr()) - extPort = some(Port(61008)) + extIp = Opt.some(getPrimaryIPAddr()) + extPort = Opt.some(Port(61008)) node = newTestWakuNode(nodeKey, bindIp, bindPort, extIp, extPort, quicEnabled = true) @@ -287,13 +288,13 @@ suite "WakuNode": nodeKey = generateSecp256k1Key() bindIp = parseIpAddress("0.0.0.0") bindPort = Port(61010) - extIp = some(getPrimaryIPAddr()) - extPort = some(Port(61012)) + extIp = Opt.some(getPrimaryIPAddr()) + extPort = Opt.some(Port(61012)) domainName = "example.com" expectedDns4Addr = MultiAddress.init("/dns4/" & domainName & "/tcp/" & $(extPort.get())).get() node = newTestWakuNode( - nodeKey, bindIp, bindPort, extIp, extPort, dns4DomainName = some(domainName) + nodeKey, bindIp, bindPort, extIp, extPort, dns4DomainName = Opt.some(domainName) ) check: @@ -308,8 +309,9 @@ suite "WakuNode": bindPort = Port(0) domainName = "status.im" - node = - newTestWakuNode(nodeKey, bindIp, bindPort, dns4DomainName = some(domainName)) + node = newTestWakuNode( + nodeKey, bindIp, bindPort, dns4DomainName = Opt.some(domainName) + ) var ipStr = "" var enrIp = node.enr.tryGet("ip", array[4, byte]) @@ -339,15 +341,16 @@ suite "WakuNode": # Create node with inexistent domain try: let node = newTestWakuNode( - nodeKey, bindIp, bindPort, dns4DomainName = some(inexistentDomain) + nodeKey, bindIp, bindPort, dns4DomainName = Opt.some(inexistentDomain) ) except Exception as e: inexistentDomainErr = e.msg # Create node with invalid domain try: - let node = - newTestWakuNode(nodeKey, bindIp, bindPort, dns4DomainName = some(invalidDomain)) + let node = newTestWakuNode( + nodeKey, bindIp, bindPort, dns4DomainName = Opt.some(invalidDomain) + ) except Exception as e: invalidDomainErr = e.msg @@ -366,7 +369,7 @@ suite "WakuNode": let # node with custom agent string nodeKey1 = generateSecp256k1Key() - node1 = newTestWakuNode(nodeKey1, agentString = some(expectedAgentString1)) + node1 = newTestWakuNode(nodeKey1, agentString = Opt.some(expectedAgentString1)) # node with default agent string from libp2p nodeKey2 = generateSecp256k1Key() diff --git a/tests/testlib/tables.nim b/tests/testlib/tables.nim index c6eba9582..488106ed0 100644 --- a/tests/testlib/tables.nim +++ b/tests/testlib/tables.nim @@ -1,4 +1,4 @@ -import std/[tables, sequtils, options] +import std/[tables, sequtils] import logos_delivery/waku/waku_core/topics, ../testlib/wakucore diff --git a/tests/testlib/wakucore.nim b/tests/testlib/wakucore.nim index e1d0f8143..1286749aa 100644 --- a/tests/testlib/wakucore.nim +++ b/tests/testlib/wakucore.nim @@ -1,5 +1,5 @@ import - std/[options, times], + std/times, results, stew/byteutils, chronos, @@ -61,7 +61,7 @@ proc newStandardSwitch*( b.build() proc newTestSwitch*( - key = none(libp2p_keys.PrivateKey), address = none(MultiAddress) + key = Opt.none(libp2p_keys.PrivateKey), address = Opt.none(MultiAddress) ): Switch = let peerKey = key.get(generateSecp256k1Key()) let peerAddr = address.get(MultiAddress.init("/ip4/127.0.0.1/tcp/0").get()) diff --git a/tests/testlib/wakunode.nim b/tests/testlib/wakunode.nim index f269f6314..726ef89aa 100644 --- a/tests/testlib/wakunode.nim +++ b/tests/testlib/wakunode.nim @@ -1,5 +1,4 @@ import - std/options, results, chronos, libp2p/switch, @@ -53,8 +52,8 @@ proc newTestWakuNode*( nodeKey: crypto.PrivateKey, bindIp: IpAddress = parseIpAddress("0.0.0.0"), bindPort: Port = Port(0), - extIp = none(IpAddress), - extPort = none(Port), + extIp = Opt.none(IpAddress), + extPort = Opt.none(Port), extMultiAddrs = newSeq[MultiAddress](), peerStorage: PeerStorage = nil, maxConnections = MaxConnections, @@ -65,13 +64,13 @@ proc newTestWakuNode*( quicEnabled: bool = true, secureKey: string = "", secureCert: string = "", - wakuFlags = none(CapabilitiesBitfield), + wakuFlags = Opt.none(CapabilitiesBitfield), nameResolver: NameResolver = nil, sendSignedPeerRecord = false, - dns4DomainName = none(string), - discv5UdpPort = none(Port), - agentString = none(string), - peerStoreCapacity = none(int), + dns4DomainName = Opt.none(string), + discv5UdpPort = Opt.none(Port), + agentString = Opt.none(string), + peerStoreCapacity = Opt.none(int), clusterId = DefaultClusterId, subscribeShards = @[DefaultShardId], ): WakuNode = @@ -93,7 +92,7 @@ proc newTestWakuNode*( # Update extPort to default value if it's missing and there's an extIp or a DNS domain let extPort = if (extIp.isSome() or dns4DomainName.isSome()) and extPort.isNone(): - some(Port(0)) + Opt.some(Port(0)) else: extPort @@ -107,7 +106,7 @@ proc newTestWakuNode*( let dns = (waitFor dnsResolve(dns4DomainName.get(), conf.dnsAddrsNameServers)).valueOr: raise newException(Defect, error) - resolvedExtIp = some(parseIpAddress(dns)) + resolvedExtIp = Opt.some(parseIpAddress(dns)) let netConf = NetConfig.init( clusterId = conf.clusterId, @@ -116,10 +115,10 @@ proc newTestWakuNode*( extIp = resolvedExtIp, extPort = extPort, extMultiAddrs = extMultiAddrs, - wsBindPort = some(wsBindPort), + wsBindPort = Opt.some(wsBindPort), wsEnabled = wsEnabled, wssEnabled = wssEnabled, - quicBindPort = some(quicBindPort), + quicBindPort = Opt.some(quicBindPort), quicEnabled = quicEnabled, dns4DomainName = dns4DomainName, discv5UdpPort = discv5UdpPort, @@ -153,19 +152,19 @@ proc newTestWakuNode*( builder.withNetworkConfiguration(netConf) builder.withPeerStorage(peerStorage, capacity = peerStoreCapacity) builder.withSwitchConfiguration( - maxConnections = some(maxConnections), + maxConnections = Opt.some(maxConnections), nameResolver = nameResolver, sendSignedPeerRecord = sendSignedPeerRecord, secureKey = if secureKey != "": - some(secureKey) + Opt.some(secureKey) else: - none(string), + Opt.none(string), secureCert = if secureCert != "": - some(secureCert) + Opt.some(secureCert) else: - none(string), + Opt.none(string), agentString = agentString, ) diff --git a/tests/tools/test_confutils_envvar.nim b/tests/tools/test_confutils_envvar.nim index 76d9ddd31..bd1951144 100644 --- a/tests/tools/test_confutils_envvar.nim +++ b/tests/tools/test_confutils_envvar.nim @@ -1,22 +1,15 @@ {.used.} import - std/[os, options], - results, - testutils/unittests, - confutils, - confutils/defs, - confutils/std/net + std/os, results, testutils/unittests, confutils, confutils/defs, confutils/std/net import ../../tools/confutils/[envvar as confEnvvarDefs, envvar_net as confEnvvarNet] type ConfResult[T] = Result[T, string] type TestConf = object - configFile* {.desc: "Configuration file path", name: "config-file".}: - Option[InputFile] + configFile* {.desc: "Configuration file path", name: "config-file".}: Opt[InputFile] - testFile* {.desc: "Configuration test file path", name: "test-file".}: - Option[InputFile] + testFile* {.desc: "Configuration test file path", name: "test-file".}: Opt[InputFile] listenAddress* {. defaultValue: IpAddress(family: IpAddressFamily.IPv4, address_v4: [127u8, 0, 0, 1]), diff --git a/tests/waku_archive/archive_utils.nim b/tests/waku_archive/archive_utils.nim index 126607c59..3e60c8997 100644 --- a/tests/waku_archive/archive_utils.nim +++ b/tests/waku_archive/archive_utils.nim @@ -1,6 +1,6 @@ {.used.} -import std/options, results, chronos, libp2p/crypto/crypto +import results, chronos, libp2p/crypto/crypto import logos_delivery/waku/[ @@ -13,7 +13,7 @@ import ], ../testlib/[wakucore] -proc newSqliteDatabase*(path: Option[string] = string.none()): SqliteDatabase = +proc newSqliteDatabase*(path: Opt[string] = Opt.none(string)): SqliteDatabase = SqliteDatabase.new(path.get(":memory:")).tryGet() proc newSqliteArchiveDriver*(): ArchiveDriver = diff --git a/tests/waku_archive/test_driver_postgres.nim b/tests/waku_archive/test_driver_postgres.nim index 1295aebb6..09979d4ae 100644 --- a/tests/waku_archive/test_driver_postgres.nim +++ b/tests/waku_archive/test_driver_postgres.nim @@ -1,6 +1,6 @@ {.used.} -import std/[sequtils, options], testutils/unittests, chronos +import results, std/sequtils, testutils/unittests, chronos import logos_delivery/waku/[ waku_archive, @@ -114,14 +114,15 @@ suite "Postgres driver": # Get both content topics messagesRes = await driver.getMessages( contentTopics = @[contentTopic1, contentTopic2], - cursor = some(computeMessageHash(pubsubTopic1, messagesRes.get()[1][2])), + cursor = Opt.some(computeMessageHash(pubsubTopic1, messagesRes.get()[1][2])), ) assert messagesRes.isOk() assert messagesRes.get().len == 1 # Get both content topics but one pubsub topic messagesRes = await driver.getMessages( - contentTopics = @[contentTopic1, contentTopic2], pubsubTopic = some(pubsubTopic1) + contentTopics = @[contentTopic1, contentTopic2], + pubsubTopic = Opt.some(pubsubTopic1), ) assert messagesRes.isOk(), messagesRes.error diff --git a/tests/waku_archive/test_driver_postgres_query.nim b/tests/waku_archive/test_driver_postgres_query.nim index 9a015c2f2..487ace9e0 100644 --- a/tests/waku_archive/test_driver_postgres_query.nim +++ b/tests/waku_archive/test_driver_postgres_query.nim @@ -1,7 +1,8 @@ {.used.} import - std/[options, sequtils, strformat, random, algorithm], + results, + std/[sequtils, strformat, random, algorithm], testutils/unittests, chronos, chronicles @@ -237,11 +238,11 @@ suite "Postgres driver - queries": ## When var res = await driver.getMessages( contentTopics = @[contentTopic1, contentTopic2], - pubsubTopic = some(DefaultPubsubTopic), + pubsubTopic = Opt.some(DefaultPubsubTopic), maxPageSize = 2, ascendingOrder = true, - startTime = some(ts(00)), - endTime = some(ts(40)), + startTime = Opt.some(ts(00)), + endTime = Opt.some(ts(40)), ) ## Then @@ -254,11 +255,11 @@ suite "Postgres driver - queries": ## statement by querying one single content topic res = await driver.getMessages( contentTopics = @[contentTopic1], - pubsubTopic = some(DefaultPubsubTopic), + pubsubTopic = Opt.some(DefaultPubsubTopic), maxPageSize = 2, ascendingOrder = true, - startTime = some(ts(00)), - endTime = some(ts(40)), + startTime = Opt.some(ts(00)), + endTime = Opt.some(ts(40)), ) ## Then @@ -372,7 +373,7 @@ suite "Postgres driver - queries": ## When let res = await driver.getMessages( - pubsubTopic = some(pubsubTopic), maxPageSize = 2, ascendingOrder = true + pubsubTopic = Opt.some(pubsubTopic), maxPageSize = 2, ascendingOrder = true ) ## Then @@ -483,7 +484,7 @@ suite "Postgres driver - queries": ## When let res = await driver.getMessages( contentTopics = @[contentTopic], - pubsubTopic = some(pubsubTopic), + pubsubTopic = Opt.some(pubsubTopic), maxPageSize = 2, ascendingOrder = true, ) @@ -526,7 +527,7 @@ suite "Postgres driver - queries": ## When let res = await driver.getMessages( - cursor = some(cursor), maxPageSize = 2, ascendingOrder = true + cursor = Opt.some(cursor), maxPageSize = 2, ascendingOrder = true ) ## Then @@ -566,7 +567,7 @@ suite "Postgres driver - queries": ## When let res = await driver.getMessages( - cursor = some(cursor), maxPageSize = 2, ascendingOrder = false + cursor = Opt.some(cursor), maxPageSize = 2, ascendingOrder = false ) ## Then @@ -607,10 +608,10 @@ suite "Postgres driver - queries": let res = await driver.getMessages( includeData = true, contentTopics = @[DefaultContentTopic], - pubsubTopic = none(PubsubTopic), - cursor = some(cursor), - startTime = none(Timestamp), - endTime = none(Timestamp), + pubsubTopic = Opt.none(PubsubTopic), + cursor = Opt.some(cursor), + startTime = Opt.none(Timestamp), + endTime = Opt.none(Timestamp), hashes = @[], maxPageSize = 5, ascendingOrder = true, @@ -653,7 +654,7 @@ suite "Postgres driver - queries": ## When let res = await driver.getMessages( contentTopics = @[contentTopic], - cursor = some(cursor), + cursor = Opt.some(cursor), maxPageSize = 10, ascendingOrder = true, ) @@ -696,7 +697,7 @@ suite "Postgres driver - queries": ## When let res = await driver.getMessages( contentTopics = @[contentTopic], - cursor = some(cursor), + cursor = Opt.some(cursor), maxPageSize = 10, ascendingOrder = false, ) @@ -764,8 +765,8 @@ suite "Postgres driver - queries": ## When let res = await driver.getMessages( - pubsubTopic = some(pubsubTopic), - cursor = some(cursor), + pubsubTopic = Opt.some(pubsubTopic), + cursor = Opt.some(cursor), maxPageSize = 10, ascendingOrder = true, ) @@ -834,8 +835,8 @@ suite "Postgres driver - queries": ## When let res = await driver.getMessages( - pubsubTopic = some(pubsubTopic), - cursor = some(cursor), + pubsubTopic = Opt.some(pubsubTopic), + cursor = Opt.some(cursor), maxPageSize = 10, ascendingOrder = false, ) @@ -913,7 +914,7 @@ suite "Postgres driver - queries": ## When let res = await driver.getMessages( - startTime = some(ts(15, timeOrigin)), maxPageSize = 10, ascendingOrder = true + startTime = Opt.some(ts(15, timeOrigin)), maxPageSize = 10, ascendingOrder = true ) ## Then @@ -952,7 +953,7 @@ suite "Postgres driver - queries": ## When let res = await driver.getMessages( - endTime = some(ts(45, timeOrigin)), maxPageSize = 10, ascendingOrder = true + endTime = Opt.some(ts(45, timeOrigin)), maxPageSize = 10, ascendingOrder = true ) ## Then @@ -1018,8 +1019,8 @@ suite "Postgres driver - queries": ## When let res = await driver.getMessages( - startTime = some(ts(15, timeOrigin)), - endTime = some(ts(45, timeOrigin)), + startTime = Opt.some(ts(15, timeOrigin)), + endTime = Opt.some(ts(45, timeOrigin)), maxPageSize = 10, ascendingOrder = true, ) @@ -1063,8 +1064,8 @@ suite "Postgres driver - queries": ## When let res = await driver.getMessages( contentTopics = @[contentTopic], - startTime = some(ts(45, timeOrigin)), - endTime = some(ts(15, timeOrigin)), + startTime = Opt.some(ts(45, timeOrigin)), + endTime = Opt.some(ts(15, timeOrigin)), maxPageSize = 2, ascendingOrder = true, ) @@ -1105,7 +1106,7 @@ suite "Postgres driver - queries": ## When let res = await driver.getMessages( contentTopics = @[contentTopic], - startTime = some(ts(15, timeOrigin)), + startTime = Opt.some(ts(15, timeOrigin)), maxPageSize = 10, ascendingOrder = true, ) @@ -1149,7 +1150,7 @@ suite "Postgres driver - queries": ## When let res = await driver.getMessages( contentTopics = @[contentTopic], - startTime = some(ts(15, timeOrigin)), + startTime = Opt.some(ts(15, timeOrigin)), maxPageSize = 10, ascendingOrder = false, ) @@ -1196,8 +1197,8 @@ suite "Postgres driver - queries": ## When let res = await driver.getMessages( contentTopics = @[contentTopic], - cursor = some(cursor), - startTime = some(ts(15, timeOrigin)), + cursor = Opt.some(cursor), + startTime = Opt.some(ts(15, timeOrigin)), maxPageSize = 10, ascendingOrder = true, ) @@ -1244,8 +1245,8 @@ suite "Postgres driver - queries": ## When let res = await driver.getMessages( contentTopics = @[contentTopic], - cursor = some(cursor), - startTime = some(ts(15, timeOrigin)), + cursor = Opt.some(cursor), + startTime = Opt.some(ts(15, timeOrigin)), maxPageSize = 10, ascendingOrder = false, ) @@ -1310,10 +1311,10 @@ suite "Postgres driver - queries": ## When let res = await driver.getMessages( contentTopics = @[contentTopic], - pubsubTopic = some(pubsubTopic), - cursor = some(cursor), - startTime = some(ts(0, timeOrigin)), - endTime = some(ts(45, timeOrigin)), + pubsubTopic = Opt.some(pubsubTopic), + cursor = Opt.some(cursor), + startTime = Opt.some(ts(0, timeOrigin)), + endTime = Opt.some(ts(45, timeOrigin)), maxPageSize = 10, ascendingOrder = true, ) @@ -1378,10 +1379,10 @@ suite "Postgres driver - queries": ## When let res = await driver.getMessages( contentTopics = @[contentTopic], - pubsubTopic = some(pubsubTopic), - cursor = some(cursor), - startTime = some(ts(35, timeOrigin)), - endTime = some(ts(85, timeOrigin)), + pubsubTopic = Opt.some(pubsubTopic), + cursor = Opt.some(cursor), + startTime = Opt.some(ts(35, timeOrigin)), + endTime = Opt.some(ts(85, timeOrigin)), maxPageSize = 10, ascendingOrder = false, ) @@ -1447,10 +1448,10 @@ suite "Postgres driver - queries": ## When let res = await driver.getMessages( contentTopics = @[contentTopic], - pubsubTopic = some(pubsubTopic), - cursor = some(cursor), - startTime = some(ts(35, timeOrigin)), - endTime = some(ts(85, timeOrigin)), + pubsubTopic = Opt.some(pubsubTopic), + cursor = Opt.some(cursor), + startTime = Opt.some(ts(35, timeOrigin)), + endTime = Opt.some(ts(85, timeOrigin)), maxPageSize = 10, ascendingOrder = true, ) @@ -1517,10 +1518,10 @@ suite "Postgres driver - queries": ## When let res = await driver.getMessages( contentTopics = @[contentTopic], - pubsubTopic = some(pubsubTopic), - cursor = some(cursor), - startTime = some(ts(35, timeOrigin)), - endTime = some(ts(85, timeOrigin)), + pubsubTopic = Opt.some(pubsubTopic), + cursor = Opt.some(cursor), + startTime = Opt.some(ts(35, timeOrigin)), + endTime = Opt.some(ts(85, timeOrigin)), maxPageSize = 10, ascendingOrder = false, ) diff --git a/tests/waku_archive/test_driver_queue.nim b/tests/waku_archive/test_driver_queue.nim index 571b3790c..55c50fe1b 100644 --- a/tests/waku_archive/test_driver_queue.nim +++ b/tests/waku_archive/test_driver_queue.nim @@ -1,6 +1,6 @@ {.used.} -import std/options, results, testutils/unittests +import results, testutils/unittests import logos_delivery/waku/[ waku_archive, diff --git a/tests/waku_archive/test_driver_queue_pagination.nim b/tests/waku_archive/test_driver_queue_pagination.nim index 1cc18d9ec..ddfe0e1c3 100644 --- a/tests/waku_archive/test_driver_queue_pagination.nim +++ b/tests/waku_archive/test_driver_queue_pagination.nim @@ -1,7 +1,7 @@ {.used.} import - std/[options, sequtils, algorithm], testutils/unittests, libp2p/protobuf/minprotobuf + results, std/[sequtils, algorithm], testutils/unittests, libp2p/protobuf/minprotobuf import logos_delivery/waku/[ waku_archive, @@ -41,7 +41,7 @@ procSuite "Queue driver - pagination": ## Given let pageSize: uint = 2 - cursor: Option[Index] = some(indexList[3]) + cursor: Opt[Index] = Opt.some(indexList[3]) forward: bool = true ## When @@ -57,7 +57,7 @@ procSuite "Queue driver - pagination": ## Given let pageSize: uint = 2 - cursor: Option[Index] = none(Index) + cursor: Opt[Index] = Opt.none(Index) forward: bool = true ## When @@ -73,7 +73,7 @@ procSuite "Queue driver - pagination": ## Given let pageSize: uint = 13 - cursor: Option[Index] = none(Index) + cursor: Opt[Index] = Opt.none(Index) forward: bool = true ## When @@ -90,7 +90,7 @@ procSuite "Queue driver - pagination": let driver = getTestQueueDriver(0) let pageSize: uint = 2 - cursor: Option[Index] = none(Index) + cursor: Opt[Index] = Opt.none(Index) forward: bool = true ## When @@ -105,7 +105,7 @@ procSuite "Queue driver - pagination": ## Given let pageSize: uint = 10 - cursor: Option[Index] = some(indexList[3]) + cursor: Opt[Index] = Opt.some(indexList[3]) forward: bool = true ## When @@ -121,7 +121,7 @@ procSuite "Queue driver - pagination": ## Given let pageSize: uint = MaxPageSize + 1 - cursor: Option[Index] = some(indexList[3]) + cursor: Opt[Index] = Opt.some(indexList[3]) forward: bool = true ## When @@ -136,7 +136,7 @@ procSuite "Queue driver - pagination": ## Given let pageSize: uint = 10 - cursor: Option[Index] = some(indexList[9]) + cursor: Opt[Index] = Opt.some(indexList[9]) forward: bool = true ## When @@ -154,7 +154,7 @@ procSuite "Queue driver - pagination": let pageSize: uint = 10 - cursor: Option[Index] = some(index) + cursor: Opt[Index] = Opt.some(index) forward: bool = true ## When @@ -170,7 +170,7 @@ procSuite "Queue driver - pagination": let driver = getTestQueueDriver(1) let pageSize: uint = 10 - cursor: Option[Index] = none(Index) + cursor: Opt[Index] = Opt.none(Index) forward: bool = true ## When @@ -186,7 +186,7 @@ procSuite "Queue driver - pagination": let driver = getTestQueueDriver(1) let pageSize: uint = 10 - cursor: Option[Index] = some(indexList[0]) + cursor: Opt[Index] = Opt.some(indexList[0]) forward: bool = true ## When @@ -201,7 +201,7 @@ procSuite "Queue driver - pagination": ## Given let pageSize: uint = 3 - cursor: Option[Index] = none(Index) + cursor: Opt[Index] = Opt.none(Index) forward = true proc onlyEvenTimes(index: Index, msg: WakuMessage): bool = @@ -221,7 +221,7 @@ procSuite "Queue driver - pagination": ## Given let pageSize: uint = 2 - cursor: Option[Index] = some(indexList[3]) + cursor: Opt[Index] = Opt.some(indexList[3]) forward: bool = false ## When @@ -237,7 +237,7 @@ procSuite "Queue driver - pagination": let driver = getTestQueueDriver(0) let pageSize: uint = 2 - cursor: Option[Index] = none(Index) + cursor: Opt[Index] = Opt.none(Index) forward: bool = false ## When @@ -252,7 +252,7 @@ procSuite "Queue driver - pagination": ## Given let pageSize: uint = 2 - cursor: Option[Index] = none(Index) + cursor: Opt[Index] = Opt.none(Index) forward: bool = false ## When @@ -268,7 +268,7 @@ procSuite "Queue driver - pagination": ## Given let pageSize: uint = 13 - cursor: Option[Index] = none(Index) + cursor: Opt[Index] = Opt.none(Index) forward: bool = false ## When @@ -284,7 +284,7 @@ procSuite "Queue driver - pagination": ## Given let pageSize: uint = 5 - cursor: Option[Index] = some(indexList[3]) + cursor: Opt[Index] = Opt.some(indexList[3]) forward: bool = false ## When @@ -299,7 +299,7 @@ procSuite "Queue driver - pagination": ## Given let pageSize: uint = MaxPageSize + 1 - cursor: Option[Index] = some(indexList[3]) + cursor: Opt[Index] = Opt.some(indexList[3]) forward: bool = false ## When @@ -314,7 +314,7 @@ procSuite "Queue driver - pagination": ## Given let pageSize: uint = 5 - cursor: Option[Index] = some(indexList[0]) + cursor: Opt[Index] = Opt.some(indexList[0]) forward: bool = false ## When @@ -332,7 +332,7 @@ procSuite "Queue driver - pagination": let pageSize: uint = 2 - cursor: Option[Index] = some(index) + cursor: Opt[Index] = Opt.some(index) forward: bool = false ## When @@ -348,7 +348,7 @@ procSuite "Queue driver - pagination": let driver = getTestQueueDriver(1) let pageSize: uint = 10 - cursor: Option[Index] = none(Index) + cursor: Opt[Index] = Opt.none(Index) forward: bool = false ## When @@ -364,7 +364,7 @@ procSuite "Queue driver - pagination": let driver = getTestQueueDriver(1) let pageSize: uint = 10 - cursor: Option[Index] = some(indexList[0]) + cursor: Opt[Index] = Opt.some(indexList[0]) forward: bool = false ## When @@ -379,7 +379,7 @@ procSuite "Queue driver - pagination": ## Given let pageSize: uint = 3 - cursor: Option[Index] = none(Index) + cursor: Opt[Index] = Opt.none(Index) forward = false proc onlyOddTimes(index: Index, msg: WakuMessage): bool = diff --git a/tests/waku_archive/test_driver_queue_query.nim b/tests/waku_archive/test_driver_queue_query.nim index ee371da41..12cf407c7 100644 --- a/tests/waku_archive/test_driver_queue_query.nim +++ b/tests/waku_archive/test_driver_queue_query.nim @@ -1,7 +1,7 @@ {.used.} import - std/[options, sequtils, random, algorithm], testutils/unittests, chronos, chronicles + results, std/[sequtils, random, algorithm], testutils/unittests, chronos, chronicles import logos_delivery/waku/[ waku_archive, waku_archive/driver/queue_driver, waku_core, waku_core/message/digest @@ -313,7 +313,7 @@ suite "SQLite driver - query by pubsub topic": ## When let res = waitFor driver.getMessages( - pubsubTopic = some(pubsubTopic), maxPageSize = 2, ascendingOrder = true + pubsubTopic = Opt.some(pubsubTopic), maxPageSize = 2, ascendingOrder = true ) ## Then @@ -438,7 +438,7 @@ suite "SQLite driver - query by pubsub topic": ## When let res = waitFor driver.getMessages( contentTopics = @[contentTopic], - pubsubTopic = some(pubsubTopic), + pubsubTopic = Opt.some(pubsubTopic), maxPageSize = 2, ascendingOrder = true, ) @@ -487,7 +487,7 @@ suite "Queue driver - query by cursor": ## When let res = waitFor driver.getMessages( - cursor = some(cursor), maxPageSize = 2, ascendingOrder = true + cursor = Opt.some(cursor), maxPageSize = 2, ascendingOrder = true ) ## Then @@ -532,7 +532,7 @@ suite "Queue driver - query by cursor": ## When let res = waitFor driver.getMessages( - cursor = some(cursor), maxPageSize = 2, ascendingOrder = false + cursor = Opt.some(cursor), maxPageSize = 2, ascendingOrder = false ) ## Then @@ -578,10 +578,10 @@ suite "Queue driver - query by cursor": let res = waitFor driver.getMessages( includeData = true, contentTopics = @[DefaultContentTopic], - pubsubTopic = none(PubsubTopic), - cursor = some(cursor), - startTime = none(Timestamp), - endTime = none(Timestamp), + pubsubTopic = Opt.none(PubsubTopic), + cursor = Opt.some(cursor), + startTime = Opt.none(Timestamp), + endTime = Opt.none(Timestamp), hashes = @[], maxPageSize = 5, ascendingOrder = true, @@ -627,7 +627,7 @@ suite "Queue driver - query by cursor": ## When let res = waitFor driver.getMessages( contentTopics = @[contentTopic], - cursor = some(cursor), + cursor = Opt.some(cursor), maxPageSize = 10, ascendingOrder = true, ) @@ -675,7 +675,7 @@ suite "Queue driver - query by cursor": ## When let res = waitFor driver.getMessages( contentTopics = @[contentTopic], - cursor = some(cursor), + cursor = Opt.some(cursor), maxPageSize = 10, ascendingOrder = false, ) @@ -750,8 +750,8 @@ suite "Queue driver - query by cursor": ## When let res = waitFor driver.getMessages( - pubsubTopic = some(pubsubTopic), - cursor = some(cursor), + pubsubTopic = Opt.some(pubsubTopic), + cursor = Opt.some(cursor), maxPageSize = 10, ascendingOrder = true, ) @@ -827,8 +827,8 @@ suite "Queue driver - query by cursor": ## When let res = waitFor driver.getMessages( - pubsubTopic = some(pubsubTopic), - cursor = some(cursor), + pubsubTopic = Opt.some(pubsubTopic), + cursor = Opt.some(cursor), maxPageSize = 10, ascendingOrder = false, ) @@ -876,7 +876,7 @@ suite "Queue driver - query by time range": ## When let res = waitFor driver.getMessages( - startTime = some(ts(15, timeOrigin)), maxPageSize = 10, ascendingOrder = true + startTime = Opt.some(ts(15, timeOrigin)), maxPageSize = 10, ascendingOrder = true ) ## Then @@ -920,7 +920,7 @@ suite "Queue driver - query by time range": ## When let res = waitFor driver.getMessages( - endTime = some(ts(45, timeOrigin)), maxPageSize = 10, ascendingOrder = true + endTime = Opt.some(ts(45, timeOrigin)), maxPageSize = 10, ascendingOrder = true ) ## Then @@ -993,8 +993,8 @@ suite "Queue driver - query by time range": ## When let res = waitFor driver.getMessages( - startTime = some(ts(15, timeOrigin)), - endTime = some(ts(45, timeOrigin)), + startTime = Opt.some(ts(15, timeOrigin)), + endTime = Opt.some(ts(45, timeOrigin)), maxPageSize = 10, ascendingOrder = true, ) @@ -1043,8 +1043,8 @@ suite "Queue driver - query by time range": ## When let res = waitFor driver.getMessages( contentTopics = @[contentTopic], - startTime = some(ts(45, timeOrigin)), - endTime = some(ts(15, timeOrigin)), + startTime = Opt.some(ts(45, timeOrigin)), + endTime = Opt.some(ts(15, timeOrigin)), maxPageSize = 2, ascendingOrder = true, ) @@ -1090,7 +1090,7 @@ suite "Queue driver - query by time range": ## When let res = await driver.getMessages( contentTopics = @[contentTopic], - startTime = some(ts(15, timeOrigin)), + startTime = Opt.some(ts(15, timeOrigin)), maxPageSize = 10, ascendingOrder = true, ) @@ -1139,7 +1139,7 @@ suite "Queue driver - query by time range": ## When let res = waitFor driver.getMessages( contentTopics = @[contentTopic], - startTime = some(ts(15, timeOrigin)), + startTime = Opt.some(ts(15, timeOrigin)), maxPageSize = 10, ascendingOrder = false, ) @@ -1191,8 +1191,8 @@ suite "Queue driver - query by time range": ## When let res = await driver.getMessages( contentTopics = @[contentTopic], - cursor = some(cursor), - startTime = some(ts(15, timeOrigin)), + cursor = Opt.some(cursor), + startTime = Opt.some(ts(15, timeOrigin)), maxPageSize = 10, ascendingOrder = true, ) @@ -1244,8 +1244,8 @@ suite "Queue driver - query by time range": ## When let res = await driver.getMessages( contentTopics = @[contentTopic], - cursor = some(cursor), - startTime = some(ts(15, timeOrigin)), + cursor = Opt.some(cursor), + startTime = Opt.some(ts(15, timeOrigin)), maxPageSize = 10, ascendingOrder = false, ) @@ -1317,10 +1317,10 @@ suite "Queue driver - query by time range": ## When let res = waitFor driver.getMessages( contentTopics = @[contentTopic], - pubsubTopic = some(pubsubTopic), - cursor = some(cursor), - startTime = some(ts(0, timeOrigin)), - endTime = some(ts(45, timeOrigin)), + pubsubTopic = Opt.some(pubsubTopic), + cursor = Opt.some(cursor), + startTime = Opt.some(ts(0, timeOrigin)), + endTime = Opt.some(ts(45, timeOrigin)), maxPageSize = 10, ascendingOrder = true, ) @@ -1392,10 +1392,10 @@ suite "Queue driver - query by time range": ## When let res = waitFor driver.getMessages( contentTopics = @[contentTopic], - pubsubTopic = some(pubsubTopic), - cursor = some(cursor), - startTime = some(ts(35, timeOrigin)), - endTime = some(ts(85, timeOrigin)), + pubsubTopic = Opt.some(pubsubTopic), + cursor = Opt.some(cursor), + startTime = Opt.some(ts(35, timeOrigin)), + endTime = Opt.some(ts(85, timeOrigin)), maxPageSize = 10, ascendingOrder = false, ) @@ -1468,10 +1468,10 @@ suite "Queue driver - query by time range": ## When let res = waitFor driver.getMessages( contentTopics = @[contentTopic], - pubsubTopic = some(pubsubTopic), - cursor = some(cursor), - startTime = some(ts(35, timeOrigin)), - endTime = some(ts(85, timeOrigin)), + pubsubTopic = Opt.some(pubsubTopic), + cursor = Opt.some(cursor), + startTime = Opt.some(ts(35, timeOrigin)), + endTime = Opt.some(ts(85, timeOrigin)), maxPageSize = 10, ascendingOrder = true, ) @@ -1545,10 +1545,10 @@ suite "Queue driver - query by time range": ## When let res = waitFor driver.getMessages( contentTopics = @[contentTopic], - pubsubTopic = some(pubsubTopic), - cursor = some(cursor), - startTime = some(ts(35, timeOrigin)), - endTime = some(ts(85, timeOrigin)), + pubsubTopic = Opt.some(pubsubTopic), + cursor = Opt.some(cursor), + startTime = Opt.some(ts(35, timeOrigin)), + endTime = Opt.some(ts(85, timeOrigin)), maxPageSize = 10, ascendingOrder = false, ) diff --git a/tests/waku_archive/test_driver_sqlite_query.nim b/tests/waku_archive/test_driver_sqlite_query.nim index fcd52e7fb..6d7df3ddf 100644 --- a/tests/waku_archive/test_driver_sqlite_query.nim +++ b/tests/waku_archive/test_driver_sqlite_query.nim @@ -1,7 +1,7 @@ {.used.} import - std/[options, sequtils, random, algorithm], testutils/unittests, chronos, chronicles + results, std/[sequtils, random, algorithm], testutils/unittests, chronos, chronicles import logos_delivery/waku/[waku_archive, waku_core, waku_core/message/digest], @@ -371,7 +371,7 @@ suite "SQLite driver - query by pubsub topic": ## When let res = await driver.getMessages( - pubsubTopic = some(pubsubTopic), maxPageSize = 2, ascendingOrder = true + pubsubTopic = Opt.some(pubsubTopic), maxPageSize = 2, ascendingOrder = true ) ## Then @@ -494,7 +494,7 @@ suite "SQLite driver - query by pubsub topic": ## When let res = await driver.getMessages( contentTopics = @[contentTopic], - pubsubTopic = some(pubsubTopic), + pubsubTopic = Opt.some(pubsubTopic), maxPageSize = 2, ascendingOrder = true, ) @@ -544,7 +544,7 @@ suite "SQLite driver - query by cursor": ## When let res = await driver.getMessages( - cursor = some(cursor), maxPageSize = 2, ascendingOrder = true + cursor = Opt.some(cursor), maxPageSize = 2, ascendingOrder = true ) ## Then @@ -590,7 +590,7 @@ suite "SQLite driver - query by cursor": ## When let res = await driver.getMessages( - cursor = some(cursor), maxPageSize = 2, ascendingOrder = false + cursor = Opt.some(cursor), maxPageSize = 2, ascendingOrder = false ) ## Then @@ -637,10 +637,10 @@ suite "SQLite driver - query by cursor": let res = await driver.getMessages( includeData = true, contentTopics = @[DefaultContentTopic], - pubsubTopic = none(PubsubTopic), - cursor = some(cursor), - startTime = none(Timestamp), - endTime = none(Timestamp), + pubsubTopic = Opt.none(PubsubTopic), + cursor = Opt.some(cursor), + startTime = Opt.none(Timestamp), + endTime = Opt.none(Timestamp), hashes = @[], maxPageSize = 5, ascendingOrder = true, @@ -687,7 +687,7 @@ suite "SQLite driver - query by cursor": ## When let res = await driver.getMessages( contentTopics = @[contentTopic], - cursor = some(cursor), + cursor = Opt.some(cursor), maxPageSize = 10, ascendingOrder = true, ) @@ -736,7 +736,7 @@ suite "SQLite driver - query by cursor": ## When let res = await driver.getMessages( contentTopics = @[contentTopic], - cursor = some(cursor), + cursor = Opt.some(cursor), maxPageSize = 10, ascendingOrder = false, ) @@ -810,8 +810,8 @@ suite "SQLite driver - query by cursor": ## When let res = await driver.getMessages( - pubsubTopic = some(pubsubTopic), - cursor = some(cursor), + pubsubTopic = Opt.some(pubsubTopic), + cursor = Opt.some(cursor), maxPageSize = 10, ascendingOrder = true, ) @@ -886,8 +886,8 @@ suite "SQLite driver - query by cursor": ## When let res = await driver.getMessages( - pubsubTopic = some(pubsubTopic), - cursor = some(cursor), + pubsubTopic = Opt.some(pubsubTopic), + cursor = Opt.some(cursor), maxPageSize = 10, ascendingOrder = false, ) @@ -936,7 +936,7 @@ suite "SQLite driver - query by time range": ## When let res = await driver.getMessages( - startTime = some(ts(15, timeOrigin)), maxPageSize = 10, ascendingOrder = true + startTime = Opt.some(ts(15, timeOrigin)), maxPageSize = 10, ascendingOrder = true ) ## Then @@ -981,7 +981,7 @@ suite "SQLite driver - query by time range": ## When let res = await driver.getMessages( - endTime = some(ts(45, timeOrigin)), maxPageSize = 10, ascendingOrder = true + endTime = Opt.some(ts(45, timeOrigin)), maxPageSize = 10, ascendingOrder = true ) ## Then @@ -1053,8 +1053,8 @@ suite "SQLite driver - query by time range": ## When let res = await driver.getMessages( - startTime = some(ts(15, timeOrigin)), - endTime = some(ts(45, timeOrigin)), + startTime = Opt.some(ts(15, timeOrigin)), + endTime = Opt.some(ts(45, timeOrigin)), maxPageSize = 10, ascendingOrder = true, ) @@ -1104,8 +1104,8 @@ suite "SQLite driver - query by time range": ## When let res = await driver.getMessages( contentTopics = @[contentTopic], - startTime = some(ts(45, timeOrigin)), - endTime = some(ts(15, timeOrigin)), + startTime = Opt.some(ts(45, timeOrigin)), + endTime = Opt.some(ts(15, timeOrigin)), maxPageSize = 2, ascendingOrder = true, ) @@ -1152,7 +1152,7 @@ suite "SQLite driver - query by time range": ## When let res = await driver.getMessages( contentTopics = @[contentTopic], - startTime = some(ts(15, timeOrigin)), + startTime = Opt.some(ts(15, timeOrigin)), maxPageSize = 10, ascendingOrder = true, ) @@ -1202,7 +1202,7 @@ suite "SQLite driver - query by time range": ## When let res = await driver.getMessages( contentTopics = @[contentTopic], - startTime = some(ts(15, timeOrigin)), + startTime = Opt.some(ts(15, timeOrigin)), maxPageSize = 10, ascendingOrder = false, ) @@ -1255,8 +1255,8 @@ suite "SQLite driver - query by time range": ## When let res = await driver.getMessages( contentTopics = @[contentTopic], - cursor = some(cursor), - startTime = some(ts(15, timeOrigin)), + cursor = Opt.some(cursor), + startTime = Opt.some(ts(15, timeOrigin)), maxPageSize = 10, ascendingOrder = true, ) @@ -1309,8 +1309,8 @@ suite "SQLite driver - query by time range": ## When let res = await driver.getMessages( contentTopics = @[contentTopic], - cursor = some(cursor), - startTime = some(ts(15, timeOrigin)), + cursor = Opt.some(cursor), + startTime = Opt.some(ts(15, timeOrigin)), maxPageSize = 10, ascendingOrder = false, ) @@ -1381,10 +1381,10 @@ suite "SQLite driver - query by time range": ## When let res = await driver.getMessages( contentTopics = @[contentTopic], - pubsubTopic = some(pubsubTopic), - cursor = some(cursor), - startTime = some(ts(0, timeOrigin)), - endTime = some(ts(45, timeOrigin)), + pubsubTopic = Opt.some(pubsubTopic), + cursor = Opt.some(cursor), + startTime = Opt.some(ts(0, timeOrigin)), + endTime = Opt.some(ts(45, timeOrigin)), maxPageSize = 10, ascendingOrder = true, ) @@ -1455,10 +1455,10 @@ suite "SQLite driver - query by time range": ## When let res = await driver.getMessages( contentTopics = @[contentTopic], - pubsubTopic = some(pubsubTopic), - cursor = some(cursor), - startTime = some(ts(35, timeOrigin)), - endTime = some(ts(85, timeOrigin)), + pubsubTopic = Opt.some(pubsubTopic), + cursor = Opt.some(cursor), + startTime = Opt.some(ts(35, timeOrigin)), + endTime = Opt.some(ts(85, timeOrigin)), maxPageSize = 10, ascendingOrder = false, ) @@ -1530,10 +1530,10 @@ suite "SQLite driver - query by time range": ## When let res = await driver.getMessages( contentTopics = @[contentTopic], - pubsubTopic = some(pubsubTopic), - cursor = some(cursor), - startTime = some(ts(35, timeOrigin)), - endTime = some(ts(85, timeOrigin)), + pubsubTopic = Opt.some(pubsubTopic), + cursor = Opt.some(cursor), + startTime = Opt.some(ts(35, timeOrigin)), + endTime = Opt.some(ts(85, timeOrigin)), maxPageSize = 10, ascendingOrder = true, ) @@ -1606,10 +1606,10 @@ suite "SQLite driver - query by time range": ## When let res = await driver.getMessages( contentTopics = @[contentTopic], - pubsubTopic = some(pubsubTopic), - cursor = some(cursor), - startTime = some(ts(35, timeOrigin)), - endTime = some(ts(85, timeOrigin)), + pubsubTopic = Opt.some(pubsubTopic), + cursor = Opt.some(cursor), + startTime = Opt.some(ts(35, timeOrigin)), + endTime = Opt.some(ts(85, timeOrigin)), maxPageSize = 10, ascendingOrder = false, ) diff --git a/tests/waku_archive/test_waku_archive.nim b/tests/waku_archive/test_waku_archive.nim index b6eb8d98e..ee7e26d86 100644 --- a/tests/waku_archive/test_waku_archive.nim +++ b/tests/waku_archive/test_waku_archive.nim @@ -1,6 +1,6 @@ {.used.} -import std/[options, sequtils], testutils/unittests, chronos, libp2p/crypto/crypto +import results, std/sequtils, testutils/unittests, chronos, libp2p/crypto/crypto import logos_delivery/waku/[ @@ -287,7 +287,7 @@ procSuite "Waku Archive - find messages": # This query targets: pubsubtopic1 AND (contentTopic1 OR contentTopic3) let req = ArchiveQuery( includeData: true, - pubsubTopic: some(pubsubTopic1), + pubsubTopic: Opt.some(pubsubTopic1), contentTopics: @[contentTopic1, contentTopic3], ) @@ -323,7 +323,7 @@ procSuite "Waku Archive - find messages": waitFor archive.handleMessage(pubsubtopic2, msg3) ## Given - let req = ArchiveQuery(pubsubTopic: some(pubsubTopic1)) + let req = ArchiveQuery(pubsubTopic: Opt.some(pubsubTopic1)) ## When let res = waitFor archive.findMessages(req) @@ -354,7 +354,7 @@ procSuite "Waku Archive - find messages": waitFor archive.handleMessage(pubsubTopic, msg3) ## Given - let req = ArchiveQuery(includeData: true, pubsubTopic: some(pubsubTopic)) + let req = ArchiveQuery(includeData: true, pubsubTopic: Opt.some(pubsubTopic)) ## When let res = waitFor archive.findMessages(req) @@ -379,7 +379,7 @@ procSuite "Waku Archive - find messages": var nextReq = req # copy var pages = newSeq[seq[WakuMessage]](3) - var cursors = newSeq[Option[ArchiveCursor]](3) + var cursors = newSeq[Opt[ArchiveCursor]](3) for i in 0 ..< 3: let res = waitFor archiveA.findMessages(nextReq) @@ -395,9 +395,9 @@ procSuite "Waku Archive - find messages": ## Then check: - cursors[0] == some(computeMessageHash(DefaultPubsubTopic, msgListA[3])) - cursors[1] == some(computeMessageHash(DefaultPubsubTopic, msgListA[7])) - cursors[2] == none(ArchiveCursor) + cursors[0] == Opt.some(computeMessageHash(DefaultPubsubTopic, msgListA[3])) + cursors[1] == Opt.some(computeMessageHash(DefaultPubsubTopic, msgListA[7])) + cursors[2] == Opt.none(ArchiveCursor) check: pages[0] == msgListA[0 .. 3] @@ -413,7 +413,7 @@ procSuite "Waku Archive - find messages": var nextReq = req # copy var pages = newSeq[seq[WakuMessage]](3) - var cursors = newSeq[Option[ArchiveCursor]](3) + var cursors = newSeq[Opt[ArchiveCursor]](3) for i in 0 ..< 3: let res = waitFor archiveA.findMessages(nextReq) @@ -429,9 +429,9 @@ procSuite "Waku Archive - find messages": ## Then check: - cursors[0] == some(computeMessageHash(DefaultPubsubTopic, msgListA[6])) - cursors[1] == some(computeMessageHash(DefaultPubsubTopic, msgListA[2])) - cursors[2] == none(ArchiveCursor) + cursors[0] == Opt.some(computeMessageHash(DefaultPubsubTopic, msgListA[6])) + cursors[1] == Opt.some(computeMessageHash(DefaultPubsubTopic, msgListA[2])) + cursors[2] == Opt.none(ArchiveCursor) check: pages[0] == msgListA[6 .. 9] @@ -486,8 +486,8 @@ procSuite "Waku Archive - find messages": let req = ArchiveQuery( includeData: true, contentTopics: @[ContentTopic("1")], - startTime: some(ts(15, timeOrigin)), - endTime: some(ts(55, timeOrigin)), + startTime: Opt.some(ts(15, timeOrigin)), + endTime: Opt.some(ts(55, timeOrigin)), direction: PagingDirection.FORWARD, ) @@ -507,8 +507,8 @@ procSuite "Waku Archive - find messages": ## Given let req = ArchiveQuery( contentTopics: @[ContentTopic("1")], - startTime: some(Timestamp(2)), - endTime: some(Timestamp(2)), + startTime: Opt.some(Timestamp(2)), + endTime: Opt.some(Timestamp(2)), ) ## When @@ -526,8 +526,8 @@ procSuite "Waku Archive - find messages": ## Given let req = ArchiveQuery( contentTopics: @[ContentTopic("1")], - startTime: some(Timestamp(5)), - endTime: some(Timestamp(2)), + startTime: Opt.some(Timestamp(5)), + endTime: Opt.some(Timestamp(2)), ) ## When diff --git a/tests/waku_core/test_namespaced_topics.nim b/tests/waku_core/test_namespaced_topics.nim index 9cb378b57..1a1e23816 100644 --- a/tests/waku_core/test_namespaced_topics.nim +++ b/tests/waku_core/test_namespaced_topics.nim @@ -1,13 +1,13 @@ {.used.} -import std/options, results, testutils/unittests +import results, testutils/unittests import logos_delivery/waku/waku_core/topics suite "Waku Message - Content topics namespacing": test "Stringify namespaced content topic": ## Given var ns = NsContentTopic() - ns.generation = none(int) + ns.generation = Opt.none(int) ns.application = "toychat" ns.version = "2" ns.name = "huilong" @@ -32,7 +32,7 @@ suite "Waku Message - Content topics namespacing": let ns = nsRes.get() check: - ns.generation == none(int) + ns.generation == Opt.none(int) ns.application == "toychat" ns.version == "2" ns.name == "huilong" @@ -50,7 +50,7 @@ suite "Waku Message - Content topics namespacing": let ns = nsRes.get() check: - ns.generation == some(0) + ns.generation == Opt.some(0) ns.application == "toychat" ns.version == "2" ns.name == "huilong" diff --git a/tests/waku_core/test_peers.nim b/tests/waku_core/test_peers.nim index 246a1d6d8..8f3b00df0 100644 --- a/tests/waku_core/test_peers.nim +++ b/tests/waku_core/test_peers.nim @@ -1,6 +1,5 @@ {.used.} -import std/options import results, testutils/unittests, @@ -156,9 +155,9 @@ suite "Waku Core - Peers": ## When var builder = EnrBuilder.init(enrPrivKey, seqNum = enrSeqNum) builder.withIpAddressAndPorts( - ipAddr = some(parseIpAddress("127.0.0.1")), - tcpPort = some(Port(0)), - udpPort = some(Port(0)), + ipAddr = Opt.some(parseIpAddress("127.0.0.1")), + tcpPort = Opt.some(Port(0)), + udpPort = Opt.some(Port(0)), ) builder.withWakuCapabilities(Capabilities.Relay, Capabilities.Store) diff --git a/tests/waku_core/topics/test_pubsub_topic.nim b/tests/waku_core/topics/test_pubsub_topic.nim index 5ebf92b51..5aa5b4125 100644 --- a/tests/waku_core/topics/test_pubsub_topic.nim +++ b/tests/waku_core/topics/test_pubsub_topic.nim @@ -1,6 +1,6 @@ {.used.} -import std/[options], testutils/unittests, results +import testutils/unittests, results import logos_delivery/waku/waku_core/topics/pubsub_topic, ../../testlib/[wakucore] diff --git a/tests/waku_core/topics/test_sharding.nim b/tests/waku_core/topics/test_sharding.nim index 5979269e8..c73d8c598 100644 --- a/tests/waku_core/topics/test_sharding.nim +++ b/tests/waku_core/topics/test_sharding.nim @@ -1,4 +1,4 @@ -import std/[options, tables], testutils/unittests +import results, std/tables, testutils/unittests import logos_delivery/waku/waku_core/topics, ../../testlib/[wakucore, tables, testutils] @@ -143,7 +143,7 @@ suite "Autosharding": let sharding = Sharding(clusterId: ClusterId, shardCountGenZero: GenerationZeroShardsCount) # When calling with contentTopic as string - let topicMap = sharding.parseSharding(some(pubsubTopic04), contentTopicShort) + let topicMap = sharding.parseSharding(Opt.some(pubsubTopic04), contentTopicShort) # Then the topicMap is valid check: @@ -154,7 +154,7 @@ suite "Autosharding": Sharding(clusterId: ClusterId, shardCountGenZero: GenerationZeroShardsCount) # When calling with contentTopic as string seq let topicMap = sharding.parseSharding( - some(pubsubTopic04), @[contentTopicShort, "/0/foo/1/bar/proto"] + Opt.some(pubsubTopic04), @[contentTopicShort, "/0/foo/1/bar/proto"] ) # Then the topicMap is valid @@ -165,7 +165,7 @@ suite "Autosharding": let sharding = Sharding(clusterId: ClusterId, shardCountGenZero: GenerationZeroShardsCount) # When calling with pubsubTopic as none - let topicMap = sharding.parseSharding(PubsubTopic.none(), contentTopicShort) + let topicMap = sharding.parseSharding(Opt.none(PubsubTopic), contentTopicShort) # Then the topicMap is valid check: @@ -175,7 +175,7 @@ suite "Autosharding": let sharding = Sharding(clusterId: ClusterId, shardCountGenZero: GenerationZeroShardsCount) # When calling with pubsubTopic as none with invalid content - let topicMap = sharding.parseSharding(PubsubTopic.none(), "invalid") + let topicMap = sharding.parseSharding(Opt.none(PubsubTopic), "invalid") # Then the topicMap is valid check: @@ -186,7 +186,7 @@ suite "Autosharding": let sharding = Sharding(clusterId: ClusterId, shardCountGenZero: GenerationZeroShardsCount) # When calling with pubsubTopic as none with invalid content - let topicMap = sharding.parseSharding(some("invalid"), contentTopicShort) + let topicMap = sharding.parseSharding(Opt.some("invalid"), contentTopicShort) # Then the topicMap is valid check: @@ -197,7 +197,7 @@ suite "Autosharding": let sharding = Sharding(clusterId: ClusterId, shardCountGenZero: GenerationZeroShardsCount) # When calling with pubsubTopic as none with invalid content - let topicMap = sharding.parseSharding(PubsubTopic.none(), contentTopicInvalid) + let topicMap = sharding.parseSharding(Opt.none(PubsubTopic), contentTopicInvalid) # Then the topicMap is valid check: diff --git a/tests/waku_discv5/test_waku_discv5.nim b/tests/waku_discv5/test_waku_discv5.nim index 7f42e3b80..be24ee9ad 100644 --- a/tests/waku_discv5/test_waku_discv5.nim +++ b/tests/waku_discv5/test_waku_discv5.nim @@ -2,7 +2,7 @@ import libp2p/crypto/rng {.used.} import - std/[sequtils, algorithm, options, net], + std/[sequtils, algorithm, net], results, chronos, chronicles, @@ -183,7 +183,7 @@ suite "Waku Discovery v5": bindIp: string = "0.0.0.0", extIp: string = "127.0.0.1", indices: seq[uint64] = @[], - recordFlags: Option[CapabilitiesBitfield] = none(CapabilitiesBitfield), + recordFlags: Opt[CapabilitiesBitfield] = Opt.none(CapabilitiesBitfield), bootstrapRecords: seq[waku_enr.Record] = @[], ): Future[Result[(WakuDiscoveryV5, waku_enr.Record), string]] {.async.} = let privKey = generateSecp256k1Key() @@ -265,7 +265,7 @@ suite "Waku Discovery v5": await buildNode( tcpPort = 61504u16, recordFlags = - some(CapabilitiesBitfield.init(Capabilities.Relay, Capabilities.Filter)), + Opt.some(CapabilitiesBitfield.init(Capabilities.Relay, Capabilities.Filter)), ) ).valueOr: raiseAssert "node3: " & error @@ -273,7 +273,7 @@ suite "Waku Discovery v5": await buildNode( tcpPort = 61506u16, recordFlags = - some(CapabilitiesBitfield.init(Capabilities.Relay, Capabilities.Store)), + Opt.some(CapabilitiesBitfield.init(Capabilities.Relay, Capabilities.Store)), ) ).valueOr: raiseAssert "node4: " & error @@ -281,7 +281,7 @@ suite "Waku Discovery v5": await buildNode( tcpPort = 61502u16, recordFlags = - some(CapabilitiesBitfield.init(Capabilities.Relay, Capabilities.Store)), + Opt.some(CapabilitiesBitfield.init(Capabilities.Relay, Capabilities.Store)), bootstrapRecords = @[record3, record4], ) ).valueOr: @@ -289,7 +289,7 @@ suite "Waku Discovery v5": let (node1, record1) = ( await buildNode( tcpPort = 61500u16, - recordFlags = some(CapabilitiesBitfield.init(Capabilities.Relay)), + recordFlags = Opt.some(CapabilitiesBitfield.init(Capabilities.Relay)), bootstrapRecords = @[record2], ) ).valueOr: @@ -298,7 +298,7 @@ suite "Waku Discovery v5": await sleepAsync(FUTURE_TIMEOUT) ## When - let peers = await node1.findRandomPeers(some(filterForStore)) + let peers = await node1.findRandomPeers(Opt.some(filterForStore)) ## Then check: @@ -317,7 +317,7 @@ suite "Waku Discovery v5": await buildNode( tcpPort = 61504u16, recordFlags = - some(CapabilitiesBitfield.init(Capabilities.Relay, Capabilities.Filter)), + Opt.some(CapabilitiesBitfield.init(Capabilities.Relay, Capabilities.Filter)), ) ).valueOr: raiseAssert "node3: " & error @@ -325,7 +325,7 @@ suite "Waku Discovery v5": await buildNode( tcpPort = 61506u16, recordFlags = - some(CapabilitiesBitfield.init(Capabilities.Relay, Capabilities.Store)), + Opt.some(CapabilitiesBitfield.init(Capabilities.Relay, Capabilities.Store)), ) ).valueOr: raiseAssert "node4: " & error @@ -333,7 +333,7 @@ suite "Waku Discovery v5": await buildNode( tcpPort = 61502u16, recordFlags = - some(CapabilitiesBitfield.init(Capabilities.Relay, Capabilities.Store)), + Opt.some(CapabilitiesBitfield.init(Capabilities.Relay, Capabilities.Store)), bootstrapRecords = @[record3, record4], ) ).valueOr: @@ -341,7 +341,7 @@ suite "Waku Discovery v5": let (node1, record1) = ( await buildNode( tcpPort = 61500u16, - recordFlags = some(CapabilitiesBitfield.init(Capabilities.Relay)), + recordFlags = Opt.some(CapabilitiesBitfield.init(Capabilities.Relay)), indices = @[0u64, 0u64, 1u64, 0u64, 0u64], bootstrapRecords = @[record2], ) diff --git a/tests/waku_discv5/utils.nim b/tests/waku_discv5/utils.nim index bbb47308e..ddea3896d 100644 --- a/tests/waku_discv5/utils.nim +++ b/tests/waku_discv5/utils.nim @@ -1,4 +1,4 @@ -import std/options, chronos, libp2p/crypto/crypto as libp2p_keys, eth/keys as eth_keys +import results, chronos, libp2p/crypto/crypto as libp2p_keys, eth/keys as eth_keys import logos_delivery/waku/ @@ -13,7 +13,7 @@ proc newTestDiscv5*( record: waku_enr.Record, bootstrapRecords = newSeq[waku_enr.Record](), queue = newAsyncEventQueue[SubscriptionEvent](30), - peerManager: Option[PeerManager] = none(PeerManager), + peerManager: Opt[PeerManager] = Opt.none(PeerManager), ): WakuDiscoveryV5 = let config = WakuDiscoveryV5Config( privateKey: eth_keys.PrivateKey(privKey.skkey), @@ -25,7 +25,7 @@ proc newTestDiscv5*( let discv5 = WakuDiscoveryV5.new( rng = rng(), conf = config, - record = some(record), + record = Opt.some(record), queue = queue, peerManager = peerManager, ) diff --git a/tests/waku_enr/utils.nim b/tests/waku_enr/utils.nim index c9948e268..a1c3d88d2 100644 --- a/tests/waku_enr/utils.nim +++ b/tests/waku_enr/utils.nim @@ -1,10 +1,5 @@ import - std/options, - sequtils, - results, - chronos, - libp2p/crypto/crypto as libp2p_keys, - eth/keys as eth_keys + sequtils, results, chronos, libp2p/crypto/crypto as libp2p_keys, eth/keys as eth_keys import logos_delivery/waku/[waku_enr, discovery/waku_discv5, waku_enr/sharding], @@ -16,13 +11,13 @@ proc newTestEnrRecord*( tcpPort: uint16, udpPort: uint16, indices: seq[uint64] = @[], - flags = none(CapabilitiesBitfield), + flags = Opt.none(CapabilitiesBitfield), ): waku_enr.Record = var builder = EnrBuilder.init(privKey) builder.withIpAddressAndPorts( - ipAddr = some(parseIpAddress(extIp)), - tcpPort = some(Port(tcpPort)), - udpPort = some(Port(udpPort)), + ipAddr = Opt.some(parseIpAddress(extIp)), + tcpPort = Opt.some(Port(tcpPort)), + udpPort = Opt.some(Port(udpPort)), ) if indices.len > 0: diff --git a/tests/waku_filter_v2/test_waku_client.nim b/tests/waku_filter_v2/test_waku_client.nim index 8a802d911..8141a139e 100644 --- a/tests/waku_filter_v2/test_waku_client.nim +++ b/tests/waku_filter_v2/test_waku_client.nim @@ -1,6 +1,6 @@ {.used.} -import std/[options, sequtils, json], testutils/unittests, results, chronos +import std/[sequtils, json], testutils/unittests, results, chronos import logos_delivery/waku/node/peer_manager, diff --git a/tests/waku_filter_v2/test_waku_filter_dos_protection.nim b/tests/waku_filter_v2/test_waku_filter_dos_protection.nim index c55a9b4cd..ab8d202bb 100644 --- a/tests/waku_filter_v2/test_waku_filter_dos_protection.nim +++ b/tests/waku_filter_v2/test_waku_filter_dos_protection.nim @@ -1,7 +1,7 @@ {.used.} import - std/[options, tables, json], + std/[tables, json], testutils/unittests, results, chronos, @@ -44,37 +44,37 @@ proc subscribe( serverRemotePeerInfo: RemotePeerInfo, pubsubTopic: PubsubTopic, contentTopicSeq: seq[ContentTopic], -): Option[FilterSubscribeErrorKind] = +): Opt[FilterSubscribeErrorKind] = let subscribeResponse = waitFor client.wakuFilterClient.subscribe( serverRemotePeerInfo, pubsubTopic, contentTopicSeq ) if subscribeResponse.isOk(): - return none[FilterSubscribeErrorKind]() + return Opt.none(FilterSubscribeErrorKind) - return some(subscribeResponse.error().kind) + return Opt.some(subscribeResponse.error().kind) proc unsubscribe( client: AFilterClient, serverRemotePeerInfo: RemotePeerInfo, pubsubTopic: PubsubTopic, contentTopicSeq: seq[ContentTopic], -): Option[FilterSubscribeErrorKind] = +): Opt[FilterSubscribeErrorKind] = let unsubscribeResponse = waitFor client.wakuFilterClient.unsubscribe( serverRemotePeerInfo, pubsubTopic, contentTopicSeq ) if unsubscribeResponse.isOk(): - return none[FilterSubscribeErrorKind]() + return Opt.none(FilterSubscribeErrorKind) - return some(unsubscribeResponse.error().kind) + return Opt.some(unsubscribeResponse.error().kind) proc ping( client: AFilterClient, serverRemotePeerInfo: RemotePeerInfo -): Option[FilterSubscribeErrorKind] = +): Opt[FilterSubscribeErrorKind] = let pingResponse = waitFor client.wakuFilterClient.ping(serverRemotePeerInfo) if pingResponse.isOk(): - return none[FilterSubscribeErrorKind]() + return Opt.none(FilterSubscribeErrorKind) - return some(pingResponse.error().kind) + return Opt.some(pingResponse.error().kind) suite "Waku Filter - DOS protection": var serverSwitch {.threadvar.}: Switch @@ -95,7 +95,7 @@ suite "Waku Filter - DOS protection": contentTopicSeq = @[contentTopic] serverSwitch = newStandardSwitch() wakuFilter = await newTestWakuFilter( - serverSwitch, rateLimitSetting = some((3, 1000.milliseconds)) + serverSwitch, rateLimitSetting = Opt.some((3, 1000.milliseconds)) ) await allFutures( @@ -118,9 +118,9 @@ suite "Waku Filter - DOS protection": asyncTest "Limit number of subscriptions requests": # Given check client1.subscribe(serverRemotePeerInfo, pubsubTopic, contentTopicSeq) == - none(FilterSubscribeErrorKind) + Opt.none(FilterSubscribeErrorKind) check client2.subscribe(serverRemotePeerInfo, pubsubTopic, contentTopicSeq) == - none(FilterSubscribeErrorKind) + Opt.none(FilterSubscribeErrorKind) # Avoid using tiny sleeps to control refill behavior: CI scheduling can # oversleep and mint additional tokens. Instead, issue a small burst of @@ -145,7 +145,7 @@ suite "Waku Filter - DOS protection": # Ensure the other client is not affected by client1's rate limit. check client2.subscribe(serverRemotePeerInfo, pubsubTopic, contentTopicSeq) == - none(FilterSubscribeErrorKind) + Opt.none(FilterSubscribeErrorKind) var c2SubscribeFutures = newSeq[Future[FilterSubscribeResult]]() for i in 0 ..< 6: @@ -168,9 +168,9 @@ suite "Waku Filter - DOS protection": # ensure period of time has passed and clients can again use the service await sleepAsync(1100.milliseconds) check client1.subscribe(serverRemotePeerInfo, pubsubTopic, contentTopicSeq) == - none(FilterSubscribeErrorKind) + Opt.none(FilterSubscribeErrorKind) check client2.subscribe(serverRemotePeerInfo, pubsubTopic, contentTopicSeq) == - none(FilterSubscribeErrorKind) + Opt.none(FilterSubscribeErrorKind) asyncTest "Ensure normal usage allowed": # Given @@ -180,28 +180,29 @@ suite "Waku Filter - DOS protection": # - refill rate = 3 tokens / second => ~1 token every ~333ms # - each request consumes 1 token (including UNSUBSCRIBE) check client1.subscribe(serverRemotePeerInfo, pubsubTopic, contentTopicSeq) == - none(FilterSubscribeErrorKind) + Opt.none(FilterSubscribeErrorKind) check wakuFilter.subscriptions.isSubscribed(client1.clientPeerId) # Expected remaining tokens (approx): 2 await sleepAsync(500.milliseconds) - check client1.ping(serverRemotePeerInfo) == none(FilterSubscribeErrorKind) + check client1.ping(serverRemotePeerInfo) == Opt.none(FilterSubscribeErrorKind) check wakuFilter.subscriptions.isSubscribed(client1.clientPeerId) # After ~500ms, ~1 token refilled; PING consumes 1 => expected remaining: 2 await sleepAsync(500.milliseconds) - check client1.ping(serverRemotePeerInfo) == none(FilterSubscribeErrorKind) + check client1.ping(serverRemotePeerInfo) == Opt.none(FilterSubscribeErrorKind) check wakuFilter.subscriptions.isSubscribed(client1.clientPeerId) # After another ~500ms, ~1 token refilled; PING consumes 1 => expected remaining: 2 check client1.unsubscribe(serverRemotePeerInfo, pubsubTopic, contentTopicSeq) == - none(FilterSubscribeErrorKind) + Opt.none(FilterSubscribeErrorKind) check wakuFilter.subscriptions.isSubscribed(client1.clientPeerId) == false - check client1.ping(serverRemotePeerInfo) == some(FilterSubscribeErrorKind.NOT_FOUND) + check client1.ping(serverRemotePeerInfo) == + Opt.some(FilterSubscribeErrorKind.NOT_FOUND) # After unsubscribing, PING is expected to return NOT_FOUND while still # counting towards the rate limit. @@ -225,5 +226,5 @@ suite "Waku Filter - DOS protection": check gotTooMany check client2.subscribe(serverRemotePeerInfo, pubsubTopic, contentTopicSeq) == - none(FilterSubscribeErrorKind) + Opt.none(FilterSubscribeErrorKind) check wakuFilter.subscriptions.isSubscribed(client2.clientPeerId) == true diff --git a/tests/waku_filter_v2/waku_filter_utils.nim b/tests/waku_filter_v2/waku_filter_utils.nim index d03922998..cabd6a10a 100644 --- a/tests/waku_filter_v2/waku_filter_utils.nim +++ b/tests/waku_filter_v2/waku_filter_utils.nim @@ -1,4 +1,4 @@ -import std/[options, tables, sets, algorithm], chronos, chronicles, os +import results, std/[tables, sets, algorithm], chronos, chronicles, os import logos_delivery/waku/[ @@ -16,7 +16,7 @@ proc newTestWakuFilter*( subscriptionTimeout: Duration = DefaultSubscriptionTimeToLiveSec, maxFilterPeers: uint32 = MaxFilterPeers, maxFilterCriteriaPerPeer: uint32 = MaxFilterCriteriaPerPeer, - rateLimitSetting: Option[RateLimitSetting] = none[RateLimitSetting](), + rateLimitSetting: Opt[RateLimitSetting] = Opt.none(RateLimitSetting), ): Future[WakuFilter] {.async.} = let peerManager = PeerManager.new(switch) diff --git a/tests/waku_kademlia/test_waku_kademlia.nim b/tests/waku_kademlia/test_waku_kademlia.nim index f4b84bf41..2ecfd47a7 100644 --- a/tests/waku_kademlia/test_waku_kademlia.nim +++ b/tests/waku_kademlia/test_waku_kademlia.nim @@ -1,5 +1,5 @@ import - std/[options, sequtils, strutils], + std/[sequtils, strutils], results, chronos, chronicles, diff --git a/tests/waku_kademlia/utils.nim b/tests/waku_kademlia/utils.nim index 1057872d8..5f4300432 100644 --- a/tests/waku_kademlia/utils.nim +++ b/tests/waku_kademlia/utils.nim @@ -1,6 +1,6 @@ {.used.} -import std/[options, sets] +import std/sets import chronos, chronicles, results import libp2p/[peerid, multiaddress, switch] import libp2p/extended_peer_record diff --git a/tests/waku_lightpush/lightpush_utils.nim b/tests/waku_lightpush/lightpush_utils.nim index d4a8b12e2..4d6ac76b9 100644 --- a/tests/waku_lightpush/lightpush_utils.nim +++ b/tests/waku_lightpush/lightpush_utils.nim @@ -1,6 +1,6 @@ {.used.} -import std/options, chronos, chronicles, libp2p/crypto/crypto +import results, chronos, chronicles, libp2p/crypto/crypto import logos_delivery/waku/node/peer_manager, @@ -14,13 +14,17 @@ import proc newTestWakuLightpushNode*( switch: Switch, handler: PushMessageHandler, - rateLimitSetting: Option[RateLimitSetting] = none[RateLimitSetting](), + rateLimitSetting: Opt[RateLimitSetting] = Opt.none(RateLimitSetting), ): Future[WakuLightPush] {.async.} = let peerManager = PeerManager.new(switch) wakuAutoSharding = Sharding(clusterId: 1, shardCountGenZero: 8) proto = WakuLightPush.new( - peerManager, crypto.newRng(), handler, some(wakuAutoSharding), rateLimitSetting + peerManager, + crypto.newRng(), + handler, + Opt.some(wakuAutoSharding), + rateLimitSetting, ) await proto.start() diff --git a/tests/waku_lightpush/test_client.nim b/tests/waku_lightpush/test_client.nim index c7bf7b4a6..3e8e1a359 100644 --- a/tests/waku_lightpush/test_client.nim +++ b/tests/waku_lightpush/test_client.nim @@ -1,11 +1,7 @@ {.used.} import - std/[options, strscans], - testutils/unittests, - chronos, - chronicles, - libp2p/crypto/crypto + results, std/strscans, testutils/unittests, chronos, chronicles, libp2p/crypto/crypto import logos_delivery/waku/[ @@ -80,7 +76,7 @@ suite "Waku Lightpush Client": # When publishing a valid payload let publishResponse = - await client.publish(some(pubsubTopic), message, serverRemotePeerInfo) + await client.publish(Opt.some(pubsubTopic), message, serverRemotePeerInfo) # Then the message is received by the server discard await handlerFuture.withTimeout(FUTURE_TIMEOUT) @@ -93,7 +89,7 @@ suite "Waku Lightpush Client": # When publishing a valid payload handlerFuture = newPushHandlerFuture() let publishResponse2 = await client.publish( - some(pubsub_topics.CURRENT), message2, serverRemotePeerInfo + Opt.some(pubsub_topics.CURRENT), message2, serverRemotePeerInfo ) # Then the message is received by the server @@ -107,7 +103,7 @@ suite "Waku Lightpush Client": # When publishing a valid payload handlerFuture = newPushHandlerFuture() let publishResponse3 = await client.publish( - some(pubsub_topics.CURRENT_NESTED), message3, serverRemotePeerInfo + Opt.some(pubsub_topics.CURRENT_NESTED), message3, serverRemotePeerInfo ) # Then the message is received by the server @@ -121,7 +117,7 @@ suite "Waku Lightpush Client": # When publishing a valid payload handlerFuture = newPushHandlerFuture() let publishResponse4 = await client.publish( - some(pubsub_topics.SHARDING), message4, serverRemotePeerInfo + Opt.some(pubsub_topics.SHARDING), message4, serverRemotePeerInfo ) # Then the message is received by the server @@ -134,8 +130,9 @@ suite "Waku Lightpush Client": # When publishing a valid payload handlerFuture = newPushHandlerFuture() - let publishResponse5 = - await client.publish(some(pubsub_topics.PLAIN), message5, serverRemotePeerInfo) + let publishResponse5 = await client.publish( + Opt.some(pubsub_topics.PLAIN), message5, serverRemotePeerInfo + ) # Then the message is received by the server discard await handlerFuture.withTimeout(FUTURE_TIMEOUT) @@ -147,8 +144,9 @@ suite "Waku Lightpush Client": # When publishing a valid payload handlerFuture = newPushHandlerFuture() - let publishResponse6 = - await client.publish(some(pubsub_topics.LEGACY), message6, serverRemotePeerInfo) + let publishResponse6 = await client.publish( + Opt.some(pubsub_topics.LEGACY), message6, serverRemotePeerInfo + ) # Then the message is received by the server discard await handlerFuture.withTimeout(FUTURE_TIMEOUT) @@ -161,7 +159,7 @@ suite "Waku Lightpush Client": # When publishing a valid payload handlerFuture = newPushHandlerFuture() let publishResponse7 = await client.publish( - some(pubsub_topics.LEGACY_NESTED), message7, serverRemotePeerInfo + Opt.some(pubsub_topics.LEGACY_NESTED), message7, serverRemotePeerInfo ) # Then the message is received by the server @@ -175,7 +173,7 @@ suite "Waku Lightpush Client": # When publishing a valid payload handlerFuture = newPushHandlerFuture() let publishResponse8 = await client.publish( - some(pubsub_topics.LEGACY_ENCODING), message8, serverRemotePeerInfo + Opt.some(pubsub_topics.LEGACY_ENCODING), message8, serverRemotePeerInfo ) # Then the message is received by the server @@ -189,7 +187,7 @@ suite "Waku Lightpush Client": # When publishing a valid payload handlerFuture = newPushHandlerFuture() let publishResponse9 = - await client.publish(some(pubsubTopic), message9, serverRemotePeerInfo) + await client.publish(Opt.some(pubsubTopic), message9, serverRemotePeerInfo) # Then the message is received by the server discard await handlerFuture.withTimeout(FUTURE_TIMEOUT) @@ -223,7 +221,7 @@ suite "Waku Lightpush Client": # When publishing the 1KiB payload let publishResponse1 = - await client.publish(some(pubsubTopic), message1, serverRemotePeerInfo) + await client.publish(Opt.some(pubsubTopic), message1, serverRemotePeerInfo) # Then the message is received by the server assertResultOk publishResponse1 @@ -232,7 +230,7 @@ suite "Waku Lightpush Client": # When publishing the 10KiB payload handlerFuture = newPushHandlerFuture() let publishResponse2 = - await client.publish(some(pubsubTopic), message2, serverRemotePeerInfo) + await client.publish(Opt.some(pubsubTopic), message2, serverRemotePeerInfo) # Then the message is received by the server assertResultOk publishResponse2 @@ -241,7 +239,7 @@ suite "Waku Lightpush Client": # When publishing the 100KiB payload handlerFuture = newPushHandlerFuture() let publishResponse3 = - await client.publish(some(pubsubTopic), message3, serverRemotePeerInfo) + await client.publish(Opt.some(pubsubTopic), message3, serverRemotePeerInfo) # Then the message is received by the server assertResultOk publishResponse3 @@ -250,7 +248,7 @@ suite "Waku Lightpush Client": # When publishing the 1MiB + 63KiB + 911B payload (1113999B) handlerFuture = newPushHandlerFuture() let publishResponse4 = - await client.publish(some(pubsubTopic), message4, serverRemotePeerInfo) + await client.publish(Opt.some(pubsubTopic), message4, serverRemotePeerInfo) # Then the message is received by the server assertResultOk publishResponse4 @@ -259,7 +257,7 @@ suite "Waku Lightpush Client": # When publishing the 1MiB + 63KiB + 912B payload (1114000B) handlerFuture = newPushHandlerFuture() let publishResponse5 = - await client.publish(some(pubsubTopic), message5, serverRemotePeerInfo) + await client.publish(Opt.some(pubsubTopic), message5, serverRemotePeerInfo) # Then the message is not received by the server check: @@ -302,12 +300,12 @@ suite "Waku Lightpush Client": # When publishing a payload let publishResponse = - await client.publish(some(pubsubTopic), message, serverRemotePeerInfo2) + await client.publish(Opt.some(pubsubTopic), message, serverRemotePeerInfo2) # Then the response is negative check: publishResponse.error.code == LightPushErrorCode.PAYLOAD_TOO_LARGE - publishResponse.error.desc == some(handlerError) + publishResponse.error.desc == Opt.some(handlerError) (await handlerFuture2.waitForResult()).isOk() # Cleanup @@ -325,7 +323,7 @@ suite "Waku Lightpush Client": # When publishing a valid payload let publishResponse = - await client.publish(some(pubsubTopic), message, serverRemotePeerInfo) + await client.publish(Opt.some(pubsubTopic), message, serverRemotePeerInfo) # Then the message is received by the server discard await handlerFuture.withTimeout(FUTURE_TIMEOUT) @@ -350,7 +348,7 @@ suite "Waku Lightpush Client": asyncTest "Positive Responses": # When sending a valid PushRequest let publishResponse = - await client.publish(some(pubsubTopic), message, serverRemotePeerInfo) + await client.publish(Opt.some(pubsubTopic), message, serverRemotePeerInfo) # Then the response is positive assertResultOk publishResponse @@ -366,7 +364,7 @@ suite "Waku Lightpush Client": # When sending an invalid PushRequest let publishResponse = - await client.publish(some(pubsubTopic), message, serverRemotePeerInfo2) + await client.publish(Opt.some(pubsubTopic), message, serverRemotePeerInfo2) # Then the response is negative check not publishResponse.isOk() diff --git a/tests/waku_lightpush/test_ratelimit.nim b/tests/waku_lightpush/test_ratelimit.nim index 8500ad8b2..143ee28b9 100644 --- a/tests/waku_lightpush/test_ratelimit.nim +++ b/tests/waku_lightpush/test_ratelimit.nim @@ -1,6 +1,6 @@ {.used.} -import std/options, testutils/unittests, chronos, libp2p/crypto/crypto +import results, testutils/unittests, chronos, libp2p/crypto/crypto import logos_delivery/waku/ @@ -27,8 +27,9 @@ suite "Rate limited push service": let tokenPeriod = 500.millis - server = - await newTestWakuLightpushNode(serverSwitch, handler, some((3, tokenPeriod))) + server = await newTestWakuLightpushNode( + serverSwitch, handler, Opt.some((3, tokenPeriod)) + ) client = newTestWakuLightpushClient(clientSwitch) let serverPeerId = serverSwitch.peerInfo.toRemotePeerInfo() @@ -38,7 +39,7 @@ suite "Rate limited push service": handlerFuture = newFuture[(string, WakuMessage)]() let requestRes = - await client.publish(some(DefaultPubsubTopic), message, serverPeerId) + await client.publish(Opt.some(DefaultPubsubTopic), message, serverPeerId) check await handlerFuture.withTimeout(50.millis) @@ -91,7 +92,7 @@ suite "Rate limited push service": let server = - await newTestWakuLightpushNode(serverSwitch, handler, some((3, 500.millis))) + await newTestWakuLightpushNode(serverSwitch, handler, Opt.some((3, 500.millis))) client = newTestWakuLightpushClient(clientSwitch) let serverPeerId = serverSwitch.peerInfo.toRemotePeerInfo() @@ -102,7 +103,7 @@ suite "Rate limited push service": for i in 0 ..< 10: let message = fakeWakuMessage() publishFutures.add( - client.publish(some(DefaultPubsubTopic), message, serverPeerId) + client.publish(Opt.some(DefaultPubsubTopic), message, serverPeerId) ) let finished = await allFinished(publishFutures) @@ -115,7 +116,7 @@ suite "Rate limited push service": gotOk = true else: check res.error.code == LightPushErrorCode.TOO_MANY_REQUESTS - check res.error.desc == some(TooManyRequestsMessage) + check res.error.desc == Opt.some(TooManyRequestsMessage) gotTooMany = true check gotOk @@ -123,8 +124,9 @@ suite "Rate limited push service": # ensure period of time has passed and the client can again use the service await sleepAsync(tokenPeriod + 100.millis) - let recoveryRes = - await client.publish(some(DefaultPubsubTopic), fakeWakuMessage(), serverPeerId) + let recoveryRes = await client.publish( + Opt.some(DefaultPubsubTopic), fakeWakuMessage(), serverPeerId + ) check recoveryRes.isOk() ## Cleanup diff --git a/tests/waku_lightpush_legacy/lightpush_utils.nim b/tests/waku_lightpush_legacy/lightpush_utils.nim index e64f5d69f..dd2ac977e 100644 --- a/tests/waku_lightpush_legacy/lightpush_utils.nim +++ b/tests/waku_lightpush_legacy/lightpush_utils.nim @@ -1,6 +1,6 @@ {.used.} -import std/options, chronos, chronicles, libp2p/crypto/crypto +import results, chronos, chronicles, libp2p/crypto/crypto logScope: topics = "test waku_lightpush_legacy" @@ -15,7 +15,7 @@ import proc newTestWakuLegacyLightpushNode*( switch: Switch, handler: PushMessageHandler, - rateLimitSetting: Option[RateLimitSetting] = none[RateLimitSetting](), + rateLimitSetting: Opt[RateLimitSetting] = Opt.none(RateLimitSetting), ): Future[WakuLegacyLightPush] {.async.} = let peerManager = PeerManager.new(switch) diff --git a/tests/waku_lightpush_legacy/test_client.nim b/tests/waku_lightpush_legacy/test_client.nim index d60595a1e..b6d406962 100644 --- a/tests/waku_lightpush_legacy/test_client.nim +++ b/tests/waku_lightpush_legacy/test_client.nim @@ -1,6 +1,6 @@ {.used.} -import std/[options, strscans], testutils/unittests, chronos, libp2p/crypto/crypto +import std/strscans, testutils/unittests, chronos, libp2p/crypto/crypto import logos_delivery/waku/[ diff --git a/tests/waku_lightpush_legacy/test_ratelimit.nim b/tests/waku_lightpush_legacy/test_ratelimit.nim index 345501d0b..29f647722 100644 --- a/tests/waku_lightpush_legacy/test_ratelimit.nim +++ b/tests/waku_lightpush_legacy/test_ratelimit.nim @@ -1,6 +1,6 @@ {.used.} -import std/options, testutils/unittests, chronos, libp2p/crypto/crypto +import results, testutils/unittests, chronos, libp2p/crypto/crypto import logos_delivery/waku/[ @@ -33,7 +33,7 @@ suite "Rate limited push service": let tokenPeriod = 500.millis server = await newTestWakuLegacyLightpushNode( - serverSwitch, handler, some((3, tokenPeriod)) + serverSwitch, handler, Opt.some((3, tokenPeriod)) ) client = newTestWakuLegacyLightpushClient(clientSwitch) @@ -94,7 +94,7 @@ suite "Rate limited push service": let tokenPeriod = 500.millis server = await newTestWakuLegacyLightpushNode( - serverSwitch, handler, some((3, tokenPeriod)) + serverSwitch, handler, Opt.some((3, tokenPeriod)) ) client = newTestWakuLegacyLightpushClient(clientSwitch) diff --git a/tests/waku_peer_exchange/test_protocol.nim b/tests/waku_peer_exchange/test_protocol.nim index d8083158b..fb77c3174 100644 --- a/tests/waku_peer_exchange/test_protocol.nim +++ b/tests/waku_peer_exchange/test_protocol.nim @@ -1,7 +1,8 @@ {.used.} import - std/[options, sequtils, net], + results, + std/[sequtils, net], testutils/unittests, chronos, libp2p/[switch, peerId, crypto/crypto], @@ -42,13 +43,16 @@ suite "Waku Peer Exchange": bindIp = parseIpAddress("0.0.0.0") nodeKey1 = generateSecp256k1Key() - node1 = newTestWakuNode(nodeKey1, bindIp, Port(0), wakuFlags = some(flags)) + node1 = + newTestWakuNode(nodeKey1, bindIp, Port(0), wakuFlags = Opt.some(flags)) nodeKey2 = generateSecp256k1Key() - node2 = newTestWakuNode(nodeKey2, bindIp, Port(0), wakuFlags = some(flags)) + node2 = + newTestWakuNode(nodeKey2, bindIp, Port(0), wakuFlags = Opt.some(flags)) nodeKey3 = generateSecp256k1Key() - node3 = newTestWakuNode(nodeKey3, bindIp, Port(0), wakuFlags = some(flags)) + node3 = + newTestWakuNode(nodeKey3, bindIp, Port(0), wakuFlags = Opt.some(flags)) await allFutures(node1.start(), node2.start(), node3.start()) @@ -115,12 +119,12 @@ suite "Waku Peer Exchange": # Simulate node1 discovering node3 via Discv5 var info3 = node3.peerInfo.toRemotePeerInfo() - info3.enr = some(node3.enr) + info3.enr = Opt.some(node3.enr) node1.peerManager.addPeer(info3, PeerOrigin.Discv5) # Simulate node1 discovering node4 via Discv5 var info4 = node4.peerInfo.toRemotePeerInfo() - info4.enr = some(node4.enr) + info4.enr = Opt.some(node4.enr) node1.peerManager.addPeer(info4, PeerOrigin.Discv5) # Request 2 peer from px. Test all request variants @@ -193,7 +197,7 @@ suite "Waku Peer Exchange": let key1 = generateSecp256k1Key() key2 = generateSecp256k1Key() - cluster: Option[uint16] = some(uint16(16)) + cluster: Opt[uint16] = Opt.some(uint16(16)) bindIp = parseIpAddress("0.0.0.0") nodeTcpPort = Port(64010) nodeUdpPort = Port(9000) @@ -202,8 +206,12 @@ suite "Waku Peer Exchange": builder1 = EnrBuilder.init(key1) builder2 = EnrBuilder.init(key2) - builder1.withIpAddressAndPorts(some(bindIp), some(nodeTcpPort), some(nodeUdpPort)) - builder2.withIpAddressAndPorts(some(bindIp), some(nodeTcpPort), some(nodeUdpPort)) + builder1.withIpAddressAndPorts( + Opt.some(bindIp), Opt.some(nodeTcpPort), Opt.some(nodeUdpPort) + ) + builder2.withIpAddressAndPorts( + Opt.some(bindIp), Opt.some(nodeTcpPort), Opt.some(nodeUdpPort) + ) builder1.withShardedTopics(@["/waku/2/rs/1/7"]).expect("valid topic") builder2.withShardedTopics(@["/waku/2/rs/16/32"]).expect("valid topic") @@ -241,7 +249,7 @@ suite "Waku Peer Exchange": # Simulate node1 discovering node3 via Discv5 var info3 = node3.peerInfo.toRemotePeerInfo() - info3.enr = some(node3.enr) + info3.enr = Opt.some(node3.enr) node1.peerManager.addPeer(info3, PeerOrigin.Discv5) # When requesting 0 peers @@ -308,7 +316,7 @@ suite "Waku Peer Exchange": # Simulate node1 discovering node3 via Discv5 var info3 = node3.peerInfo.toRemotePeerInfo() - info3.enr = some(node3.enr) + info3.enr = Opt.some(node3.enr) node1.peerManager.addPeer(info3, PeerOrigin.Discv5) # Create connection @@ -352,7 +360,7 @@ suite "Waku Peer Exchange": # Simulate node1 discovering nodeA via Discv5 var info3 = node3.peerInfo.toRemotePeerInfo() - info3.enr = some(node3.enr) + info3.enr = Opt.some(node3.enr) node1.peerManager.addPeer(info3, PeerOrigin.Discv5) # Create connection diff --git a/tests/waku_peer_exchange/test_rpc_codec.nim b/tests/waku_peer_exchange/test_rpc_codec.nim index ca86ce294..fa61a8d2a 100644 --- a/tests/waku_peer_exchange/test_rpc_codec.nim +++ b/tests/waku_peer_exchange/test_rpc_codec.nim @@ -1,7 +1,7 @@ {.used.} import - std/[options, net], + std/net, testutils/unittests, chronos, libp2p/switch, diff --git a/tests/waku_peer_exchange/utils.nim b/tests/waku_peer_exchange/utils.nim index f762541f8..a19dde7d6 100644 --- a/tests/waku_peer_exchange/utils.nim +++ b/tests/waku_peer_exchange/utils.nim @@ -1,7 +1,7 @@ {.used.} import - std/[options, net], + std/net, results, testutils/unittests, chronos, @@ -38,14 +38,15 @@ proc startDiscv5WithAutoPort*( record.update(key, udpPort = Opt.some(p)).isOkOr: return err("could not set discv5 udp port in enr: " & $error) let conf = WakuDiscoveryV5Config( - discv5Config: none(DiscoveryConfig), + discv5Config: Opt.none(DiscoveryConfig), address: bindIp, port: p, privateKey: key, bootstrapRecords: bootstrapRecords, autoupdateRecord: true, ) - let wd = WakuDiscoveryV5.new(node.rng, conf, some(record), some(node.peerManager)) + let wd = + WakuDiscoveryV5.new(node.rng, conf, Opt.some(record), Opt.some(node.peerManager)) (await wd.start()).isOkOr: return err(error) return ok(wd) diff --git a/tests/waku_relay/test_protocol.nim b/tests/waku_relay/test_protocol.nim index a2042627e..d3b94a996 100644 --- a/tests/waku_relay/test_protocol.nim +++ b/tests/waku_relay/test_protocol.nim @@ -1,7 +1,7 @@ {.used.} import - std/[options, strformat, sets, tables], + std/[strformat, sets, tables], testutils/unittests, chronos, libp2p/protocols/pubsub/[pubsub, gossipsub], diff --git a/tests/waku_relay/test_wakunode_relay.nim b/tests/waku_relay/test_wakunode_relay.nim index 6ec622f2a..dda3c65ae 100644 --- a/tests/waku_relay/test_wakunode_relay.nim +++ b/tests/waku_relay/test_wakunode_relay.nim @@ -1,7 +1,8 @@ {.used.} import - std/[os, strutils, sequtils, sysrand, math, options], + results, + std/[os, strutils, sequtils, sysrand, math], stew/byteutils, testutils/unittests, chronos, @@ -113,7 +114,7 @@ suite "WakuNode - Relay": assert false, "Failed to subscribe to topic: " & $error await sleepAsync(500.millis) - var res = await node1.publish(some($shard), message) + var res = await node1.publish(Opt.some($shard), message) assert res.isOk(), $res.error ## Then @@ -215,13 +216,13 @@ suite "WakuNode - Relay": assert false, "Failed to subscribe to topic: " & $error await sleepAsync(500.millis) - var res = await node1.publish(some($shard), message1) + var res = await node1.publish(Opt.some($shard), message1) assert res.isOk(), $res.error await sleepAsync(500.millis) # message2 never gets relayed because of the validator - res = await node1.publish(some($shard), message2) + res = await node1.publish(Opt.some($shard), message2) assert res.isOk(), $res.error await sleepAsync(500.millis) @@ -315,7 +316,7 @@ suite "WakuNode - Relay": assert false, "Failed to subscribe to topic: " & $error await sleepAsync(500.millis) - let res = await node2.publish(some($shard), message) + let res = await node2.publish(Opt.some($shard), message) assert res.isOk(), $res.error await sleepAsync(500.millis) @@ -367,7 +368,7 @@ suite "WakuNode - Relay": assert false, "Failed to subscribe to topic: " & $error await sleepAsync(500.millis) - let res = await node2.publish(some($shard), message) + let res = await node2.publish(Opt.some($shard), message) assert res.isOk(), $res.error await sleepAsync(500.millis) @@ -428,7 +429,7 @@ suite "WakuNode - Relay": assert false, "Failed to subscribe to topic: " & $error await sleepAsync(500.millis) - let res = await node2.publish(some($shard), message) + let res = await node2.publish(Opt.some($shard), message) check res.isErr() check contains($res.error, "NoPeersToPublish") @@ -487,7 +488,7 @@ suite "WakuNode - Relay": assert false, "Failed to subscribe to topic: " & $error await sleepAsync(500.millis) - let res = await node2.publish(some($shard), message) + let res = await node2.publish(Opt.some($shard), message) assert res.isOk(), $res.error await sleepAsync(500.millis) @@ -547,7 +548,7 @@ suite "WakuNode - Relay": assert false, "Failed to subscribe to topic: " & $error await sleepAsync(500.millis) - let res = await node2.publish(some($shard), message) + let res = await node2.publish(Opt.some($shard), message) assert res.isOk(), $res.error await sleepAsync(500.millis) diff --git a/tests/waku_relay/utils.nim b/tests/waku_relay/utils.nim index 663d06c18..4d40ae8b1 100644 --- a/tests/waku_relay/utils.nim +++ b/tests/waku_relay/utils.nim @@ -1,7 +1,8 @@ {.used.} import - std/[strutils, sequtils, tempfiles, options], + results, + std/[strutils, sequtils, tempfiles], stew/byteutils, chronos, chronicles, @@ -75,7 +76,7 @@ proc sendRlnMessage*( await client.rln.generateRLNProof(message.toRLNSignal(), epochTime()) ).valueOr: raiseAssert "generateRLNProof failed: " & error - discard await client.publish(some(pubsubTopic), message) + discard await client.publish(Opt.some(pubsubTopic), message) let isCompleted = await completionFuture.withTimeout(FUTURE_TIMEOUT) return isCompleted @@ -98,6 +99,6 @@ proc sendRlnMessageWithInvalidProof*( message = WakuMessage(payload: @payload, contentTopic: contentTopic, proof: rateLimitProof) - discard await client.publish(some(pubsubTopic), message) + discard await client.publish(Opt.some(pubsubTopic), message) let isCompleted = await completionFuture.withTimeout(FUTURE_TIMEOUT) return isCompleted diff --git a/tests/waku_rln_relay/rln/waku_rln_relay_utils.nim b/tests/waku_rln_relay/rln/waku_rln_relay_utils.nim index d7577b88a..07c85922d 100644 --- a/tests/waku_rln_relay/rln/waku_rln_relay_utils.nim +++ b/tests/waku_rln_relay/rln/waku_rln_relay_utils.nim @@ -1,4 +1,3 @@ -import std/options import std/tempfiles import results @@ -48,10 +47,10 @@ proc getWakuRlnConfig*( ethClientUrls: @[EthClient], ethContractAddress: manager.ethContractAddress, chainId: manager.chainId, - credIndex: some(index), + credIndex: Opt.some(index), userMessageLimit: userMessageLimit, epochSizeSec: epochSizeSec, - ethPrivateKey: some(manager.ethPrivateKey.get()), + ethPrivateKey: Opt.some(manager.ethPrivateKey.get()), onFatalErrorAction: proc(errStr: string) = warn "non-fatal onchain test error", errStr , diff --git a/tests/waku_rln_relay/test_rln_contract_deployment.nim b/tests/waku_rln_relay/test_rln_contract_deployment.nim index e5600e829..0a21a2264 100644 --- a/tests/waku_rln_relay/test_rln_contract_deployment.nim +++ b/tests/waku_rln_relay/test_rln_contract_deployment.nim @@ -2,7 +2,7 @@ {.push raises: [].} -import std/[options, os], results, testutils/unittests, chronos, web3 +import std/os, results, testutils/unittests, chronos, web3 import logos_delivery/waku/ @@ -12,7 +12,8 @@ import suite "Token and RLN Contract Deployment": test "anvil should dump state to file on exit": # git will ignore this file, if the contract has been updated and the state file needs to be regenerated then this file can be renamed to replace the one in the repo (tests/waku_rln_relay/anvil_state/tests/waku_rln_relay/anvil_state/state-deployed-contracts-mint-and-approved.json) - let testStateFile = some("tests/waku_rln_relay/anvil_state/anvil_state.ignore.json") + let testStateFile = + Opt.some("tests/waku_rln_relay/anvil_state/anvil_state.ignore.json") let anvilProc = runAnvil(stateFile = testStateFile, dumpStateOnExit = true) let manager = waitFor setupOnchainGroupManager(deployContracts = true) diff --git a/tests/waku_rln_relay/test_rln_group_manager_onchain.nim b/tests/waku_rln_relay/test_rln_group_manager_onchain.nim index bbd97217f..5f967bed8 100644 --- a/tests/waku_rln_relay/test_rln_group_manager_onchain.nim +++ b/tests/waku_rln_relay/test_rln_group_manager_onchain.nim @@ -3,7 +3,7 @@ {.push raises: [].} import - std/[options, sequtils, deques, random, locks, osproc, algorithm, exitprocs], + std/[sequtils, deques, random, locks, osproc, algorithm, exitprocs], results, stew/byteutils, testutils/unittests, @@ -46,7 +46,7 @@ suite "Onchain group manager": setup: if not anvilStarted: - sharedAnvilProc = runAnvil(stateFile = some(DEFAULT_ANVIL_STATE_PATH)) + sharedAnvilProc = runAnvil(stateFile = Opt.some(DEFAULT_ANVIL_STATE_PATH)) anvilStarted = true addExitProc( proc() = @@ -89,8 +89,8 @@ suite "Onchain group manager": raiseAssert "Expected error when contract address doesn't exist" test "should error when keystore path and password are provided but file doesn't exist": - manager.keystorePath = some("/inexistent/file") - manager.keystorePassword = some("password") + manager.keystorePath = Opt.some("/inexistent/file") + manager.keystorePassword = Opt.some("password") (waitFor manager.init()).isErrOr: raiseAssert "Expected error when keystore file doesn't exist" @@ -248,7 +248,7 @@ suite "Onchain group manager": registrations[0].rateCommitment == getRateCommitment(idCredentials, UserMessageLimit(20)).get() and registrations[0].index == 0: - manager.idCredentials = some(idCredentials) + manager.idCredentials = Opt.some(idCredentials) fut.complete() manager.onRegister(callback) @@ -293,9 +293,9 @@ suite "Onchain group manager": (waitFor manager.init()).isOkOr: raiseAssert $error - manager.userMessageLimit = some(UserMessageLimit(20)) - manager.membershipIndex = some(MembershipIndex(0)) - manager.idCredentials = some(idCredentials) + manager.userMessageLimit = Opt.some(UserMessageLimit(20)) + manager.membershipIndex = Opt.some(MembershipIndex(0)) + manager.idCredentials = Opt.some(idCredentials) manager.merkleProofCache = newSeq[byte](640) for i in 0 ..< 640: @@ -522,7 +522,7 @@ suite "Onchain group manager": raiseAssert $error # No registration → no membership index. Guard must error rather than - # crashing inside fetchMerkleProofElements (which unwraps the Option). + # crashing inside fetchMerkleProofElements (which unwraps the Opt). check: manager.membershipIndex.isNone() @@ -755,7 +755,7 @@ suite "Onchain group manager": registrations[0].rateCommitment == getRateCommitment(credentials, UserMessageLimit(20)).get() and registrations[0].index == 0: - manager.idCredentials = some(credentials) + manager.idCredentials = Opt.some(credentials) fut.complete() manager.onRegister(callback) @@ -835,7 +835,7 @@ suite "Onchain group manager": (waitFor manager.init()).isOkOr: raiseAssert $error - manager.ethRpc = none(Web3) + manager.ethRpc = Opt.none(Web3) var isReady = true try: diff --git a/tests/waku_rln_relay/test_waku_rln_relay.nim b/tests/waku_rln_relay/test_waku_rln_relay.nim index 10de8d4d6..d63c7c924 100644 --- a/tests/waku_rln_relay/test_waku_rln_relay.nim +++ b/tests/waku_rln_relay/test_waku_rln_relay.nim @@ -1,7 +1,8 @@ {.used.} import - std/[options, os, sequtils, tempfiles, strutils, osproc, algorithm], + results, + std/[os, sequtils, tempfiles, strutils, osproc, algorithm], stew/byteutils, testutils/unittests, chronos, @@ -25,7 +26,7 @@ suite "Waku rln relay": var manager {.threadVar.}: OnchainGroupManager setup: - anvilProc = runAnvil(stateFile = some(DEFAULT_ANVIL_STATE_PATH)) + anvilProc = runAnvil(stateFile = Opt.some(DEFAULT_ANVIL_STATE_PATH)) manager = waitFor setupOnchainGroupManager(deployContracts = false) teardown: diff --git a/tests/waku_rln_relay/test_wakunode_rln_relay.nim b/tests/waku_rln_relay/test_wakunode_rln_relay.nim index 4c02b4cbd..1490e16ce 100644 --- a/tests/waku_rln_relay/test_wakunode_rln_relay.nim +++ b/tests/waku_rln_relay/test_wakunode_rln_relay.nim @@ -1,7 +1,8 @@ {.used.} import - std/[options, os, sequtils, tempfiles, strutils, osproc], + results, + std/[os, sequtils, tempfiles, strutils, osproc], stew/byteutils, testutils/unittests, chronicles, @@ -33,7 +34,7 @@ procSuite "WakuNode - RLN relay": var manager {.threadVar.}: OnchainGroupManager setup: - anvilProc = runAnvil(stateFile = some(DEFAULT_ANVIL_STATE_PATH)) + anvilProc = runAnvil(stateFile = Opt.some(DEFAULT_ANVIL_STATE_PATH)) manager = waitFor setupOnchainGroupManager(deployContracts = false) teardown: @@ -149,7 +150,7 @@ procSuite "WakuNode - RLN relay": ## node1 publishes a message with a rate limit proof, the message is then relayed to node2 which in turn ## verifies the rate limit proof of the message and relays the message to node3 ## verification at node2 occurs inside a topic validator which is installed as part of the waku-rln-relay mount proc - discard await node1.publish(some(DefaultPubsubTopic), message) + discard await node1.publish(Opt.some(DefaultPubsubTopic), message) assert (await completionFut.withTimeout(15.seconds)), "completionFut timed out" await node1.stop() @@ -285,9 +286,9 @@ procSuite "WakuNode - RLN relay": # publish 3 messages from node[0] (last 2 are spam, window is 10 secs) # publish 3 messages from node[1] (last 2 are spam, window is 10 secs) for msg in messages1: - discard await node1.publish(some($shards[0]), msg) + discard await node1.publish(Opt.some($shards[0]), msg) for msg in messages2: - discard await node2.publish(some($shards[1]), msg) + discard await node2.publish(Opt.some($shards[1]), msg) # wait for gossip to propagate await sleepAsync(5000.millis) @@ -402,7 +403,7 @@ procSuite "WakuNode - RLN relay": # message.payload = "Invalid".toBytes() message.proof[0] = message.proof[0] xor 0x01 - discard await node1.publish(some(DefaultPubsubTopic), message) + discard await node1.publish(Opt.some(DefaultPubsubTopic), message) await sleepAsync(2000.millis) check: @@ -561,10 +562,10 @@ procSuite "WakuNode - RLN relay": ## node2 should detect either of wm1 or wm2 as spam and not relay it ## node2 should relay wm3 to node3 ## node2 should not relay wm4 because it has no valid rln proof - discard await node1.publish(some(DefaultPubsubTopic), wm1) - discard await node1.publish(some(DefaultPubsubTopic), wm2) - discard await node1.publish(some(DefaultPubsubTopic), wm3) - discard await node1.publish(some(DefaultPubsubTopic), wm4) + discard await node1.publish(Opt.some(DefaultPubsubTopic), wm1) + discard await node1.publish(Opt.some(DefaultPubsubTopic), wm2) + discard await node1.publish(Opt.some(DefaultPubsubTopic), wm3) + discard await node1.publish(Opt.some(DefaultPubsubTopic), wm4) await sleepAsync(2000.millis) let @@ -690,8 +691,8 @@ procSuite "WakuNode - RLN relay": node1.rln.unsafeAppendRLNProof(wm2, epoch_1, MessageId(0)).isOkOr: raiseAssert $error - discard await node1.publish(some(DefaultPubsubTopic), wm1) - discard await node1.publish(some(DefaultPubsubTopic), wm2) + discard await node1.publish(Opt.some(DefaultPubsubTopic), wm1) + discard await node1.publish(Opt.some(DefaultPubsubTopic), wm2) await sleepAsync(publishSleepDuration) check: await node1.waitForNullifierLog(0) @@ -702,7 +703,7 @@ procSuite "WakuNode - RLN relay": node1.rln.unsafeAppendRLNProof(wm3, epoch_2, MessageId(0)).isOkOr: raiseAssert $error - discard await node1.publish(some(DefaultPubsubTopic), wm3) + discard await node1.publish(Opt.some(DefaultPubsubTopic), wm3) await sleepAsync(publishSleepDuration) @@ -714,7 +715,7 @@ procSuite "WakuNode - RLN relay": node1.rln.unsafeAppendRLNProof(wm4, epoch_3, MessageId(0)).isOkOr: raiseAssert $error - discard await node1.publish(some(DefaultPubsubTopic), wm4) + discard await node1.publish(Opt.some(DefaultPubsubTopic), wm4) await sleepAsync(publishSleepDuration) check: await node1.waitForNullifierLog(0) @@ -724,7 +725,7 @@ procSuite "WakuNode - RLN relay": node1.rln.unsafeAppendRLNProof(wm5, epoch_4, MessageId(0)).isOkOr: raiseAssert $error - discard await node1.publish(some(DefaultPubsubTopic), wm5) + discard await node1.publish(Opt.some(DefaultPubsubTopic), wm5) await sleepAsync(publishSleepDuration) check: await node1.waitForNullifierLog(0) @@ -734,7 +735,7 @@ procSuite "WakuNode - RLN relay": node1.rln.unsafeAppendRLNProof(wm6, epoch_5, MessageId(0)).isOkOr: raiseAssert $error - discard await node1.publish(some(DefaultPubsubTopic), wm6) + discard await node1.publish(Opt.some(DefaultPubsubTopic), wm6) await sleepAsync(publishSleepDuration) check: await node1.waitForNullifierLog(0) diff --git a/tests/waku_rln_relay/utils.nim b/tests/waku_rln_relay/utils.nim index 8aed18f9b..1bc7e66f3 100644 --- a/tests/waku_rln_relay/utils.nim +++ b/tests/waku_rln_relay/utils.nim @@ -1,4 +1,4 @@ -import web3, chronos, stew/byteutils +import results, web3, chronos, stew/byteutils proc deployContract*( web3: Web3, code: string, gasPrice = 0, contractInput = "" diff --git a/tests/waku_rln_relay/utils_offchain.nim b/tests/waku_rln_relay/utils_offchain.nim index 9976ec783..2dbd31744 100644 --- a/tests/waku_rln_relay/utils_offchain.nim +++ b/tests/waku_rln_relay/utils_offchain.nim @@ -1,7 +1,8 @@ {.used.} import - std/[sequtils, tempfiles, options], + results, + std/[sequtils, tempfiles], stew/byteutils, chronos, chronicles, @@ -20,10 +21,10 @@ import proc setupStaticRln*( node: WakuNode, identifier: uint, - rlnRelayEthContractAddress: Option[string] = none(string), + rlnRelayEthContractAddress: Opt[string] = Opt.none(string), ) {.async.} = await node.setRlnValidator( - WakuRlnConfig(dynamic: false, credIndex: some(identifier), epochSizeSec: 1) + WakuRlnConfig(dynamic: false, credIndex: Opt.some(identifier), epochSizeSec: 1) ) proc setupRelayWithStaticRln*( @@ -40,7 +41,7 @@ proc subscribeCompletionHandler*(node: WakuNode, pubsubTopic: string): Future[bo if topic == pubsubTopic: completionFut.complete(true) - node.subscribe((kind: PubsubSub, topic: pubsubTopic), some(relayHandler)).isOkOr: + node.subscribe((kind: PubsubSub, topic: pubsubTopic), Opt.some(relayHandler)).isOkOr: error "failed to subscribe to relay", topic = pubsubTopic, error = error completionFut.complete(false) @@ -58,7 +59,7 @@ proc sendRlnMessage*( await client.rln.generateRLNProof(message.toRLNSignal(), epochTime()) ).valueOr: raiseAssert "generateRLNProof failed: " & error - discard await client.publish(some(pubsubTopic), message) + discard await client.publish(Opt.some(pubsubTopic), message) let isCompleted = await completionFuture.withTimeout(FUTURE_TIMEOUT) return isCompleted @@ -80,6 +81,6 @@ proc sendRlnMessageWithInvalidProof*( message = WakuMessage(payload: @payload, contentTopic: contentTopic, proof: rateLimitProof) - discard await client.publish(some(pubsubTopic), message) + discard await client.publish(Opt.some(pubsubTopic), message) let isCompleted = await completionFuture.withTimeout(FUTURE_TIMEOUT) return isCompleted diff --git a/tests/waku_rln_relay/utils_onchain.nim b/tests/waku_rln_relay/utils_onchain.nim index 4955d8d64..1a1086b8b 100644 --- a/tests/waku_rln_relay/utils_onchain.nim +++ b/tests/waku_rln_relay/utils_onchain.nim @@ -4,7 +4,7 @@ import libp2p/crypto/rng {.push raises: [].} import - std/[net, options, os, osproc, streams, strutils, strformat], + std/[net, os, osproc, streams, strutils, strformat], results, stew/byteutils, testutils/unittests, @@ -99,7 +99,7 @@ proc sendMintCall( tokenAddress: Address, recipientAddress: Address, amountTokens: UInt256, - recipientBalanceBeforeExpectedTokens: Option[UInt256] = none(UInt256), + recipientBalanceBeforeExpectedTokens: Opt[UInt256] = Opt.none(UInt256), ): Future[void] {.async.} = let doBalanceAssert = recipientBalanceBeforeExpectedTokens.isSome() @@ -235,7 +235,7 @@ proc approveTokenAllowanceAndVerify*( tokenAddress: Address, spender: Address, amountWei: UInt256, - expectedAllowanceBefore: Option[UInt256] = none(UInt256), + expectedAllowanceBefore: Opt[UInt256] = Opt.none(UInt256), ): Future[Result[TxHash, string]] {.async.} = var allowanceBefore: UInt256 if expectedAllowanceBefore.isSome(): @@ -372,7 +372,7 @@ proc sendEthTransfer*( accountFrom: Address, accountTo: Address, amountWei: UInt256, - accountToBalanceBeforeExpectedWei: Option[UInt256] = none(UInt256), + accountToBalanceBeforeExpectedWei: Opt[UInt256] = Opt.none(UInt256), ): Future[TxHash] {.async.} = let doBalanceAssert = accountToBalanceBeforeExpectedWei.isSome() @@ -482,7 +482,7 @@ proc compressGzipFile*(sourcePath: string, targetPath: string): Result[void, str proc runAnvil*( port: int = 8540, chainId: string = "1234", - stateFile: Option[string] = none(string), + stateFile: Opt[string] = Opt.none(string), dumpStateOnExit: bool = false, ): Process = # Gas/fee values mirror Linea Sepolia testnet. @@ -697,7 +697,7 @@ proc setupOnchainGroupManager*( (privateKey, acc) = createEthAccount(web3) discard await sendEthTransfer( - web3, web3.defaultAccount, acc, ethToWei(1000.u256), some(0.u256) + web3, web3.defaultAccount, acc, ethToWei(1000.u256), Opt.some(0.u256) ) testTokenAddress = (await deployTestToken(privateKey, acc, web3)).valueOr: @@ -710,7 +710,7 @@ proc setupOnchainGroupManager*( testTokenAddress, acc, ethToWei(1000.u256), - some(0.u256), + Opt.some(0.u256), ) contractAddress = (await executeForgeContractDeployScripts(privateKey, acc, web3)).valueOr: @@ -735,7 +735,7 @@ proc setupOnchainGroupManager*( testTokenAddress, contractAddress, ethToWei(2000.u256), - some(0.u256), + Opt.some(0.u256), ) assert tokenApprovalResult.isOk(), tokenApprovalResult.error @@ -744,7 +744,7 @@ proc setupOnchainGroupManager*( ethClientUrls: @[ethClientUrl], ethContractAddress: $contractAddress, chainId: CHAIN_ID, - ethPrivateKey: some($privateKey), + ethPrivateKey: Opt.some($privateKey), rlnInstance: rlnInstance, onFatalErrorAction: proc(errStr: string) = raiseAssert errStr @@ -768,7 +768,7 @@ proc buildOnchainGroupManager*( ethClientUrls: @[ethClientUrl], ethContractAddress: WAKU_RLNV2_PROXY_ADDRESS, chainId: CHAIN_ID, - ethPrivateKey: some(privateKey), + ethPrivateKey: Opt.some(privateKey), rlnInstance: rlnInstanceRes.get(), onFatalErrorAction: proc(errStr: string) = raiseAssert errStr diff --git a/tests/waku_store/store_utils.nim b/tests/waku_store/store_utils.nim index f7640ca04..dea142f2e 100644 --- a/tests/waku_store/store_utils.nim +++ b/tests/waku_store/store_utils.nim @@ -1,6 +1,6 @@ {.used.} -import std/options, chronos, chronicles +import chronos, chronicles import logos_delivery/waku/[node/peer_manager, waku_store, waku_store/client], diff --git a/tests/waku_store/test_client.nim b/tests/waku_store/test_client.nim index ce9f5f802..729ef6d1f 100644 --- a/tests/waku_store/test_client.nim +++ b/tests/waku_store/test_client.nim @@ -1,6 +1,6 @@ {.used.} -import std/[options, sets], testutils/unittests, chronos, libp2p/crypto/crypto +import results, std/sets, testutils/unittests, chronos, libp2p/crypto/crypto import logos_delivery/waku/ @@ -39,18 +39,18 @@ suite "Store Client": messageSeq = @[ WakuMessageKeyValue( messageHash: hash1, - message: some(message1), - pubsubTopic: some(DefaultPubsubTopic), + message: Opt.some(message1), + pubsubTopic: Opt.some(DefaultPubsubTopic), ), WakuMessageKeyValue( messageHash: hash2, - message: some(message2), - pubsubTopic: some(DefaultPubsubTopic), + message: Opt.some(message2), + pubsubTopic: Opt.some(DefaultPubsubTopic), ), WakuMessageKeyValue( messageHash: hash3, - message: some(message3), - pubsubTopic: some(DefaultPubsubTopic), + message: Opt.some(message3), + pubsubTopic: Opt.some(DefaultPubsubTopic), ), ] handlerFuture = newHistoryFuture() @@ -60,7 +60,7 @@ suite "Store Client": handlerFuture.complete(request) return ok(StoreQueryResponse(messages: messageSeq)) storeQuery = StoreQueryRequest( - pubsubTopic: some(DefaultPubsubTopic), + pubsubTopic: Opt.some(DefaultPubsubTopic), contentTopics: @[DefaultContentTopic], paginationForward: PagingDirection.FORWARD, ) @@ -109,36 +109,36 @@ suite "Store Client": # Given some invalid queries let invalidQuery1 = StoreQueryRequest( - pubsubTopic: some(DefaultPubsubTopic), + pubsubTopic: Opt.some(DefaultPubsubTopic), contentTopics: @[], paginationForward: PagingDirection.FORWARD, ) invalidQuery2 = StoreQueryRequest( - pubsubTopic: PubsubTopic.none(), + pubsubTopic: Opt.none(PubsubTopic), contentTopics: @[DefaultContentTopic], paginationForward: PagingDirection.FORWARD, ) invalidQuery3 = StoreQueryRequest( - pubsubTopic: some(DefaultPubsubTopic), + pubsubTopic: Opt.some(DefaultPubsubTopic), contentTopics: @[DefaultContentTopic], - paginationLimit: some(uint64(0)), + paginationLimit: Opt.some(uint64(0)), ) invalidQuery4 = StoreQueryRequest( - pubsubTopic: some(DefaultPubsubTopic), + pubsubTopic: Opt.some(DefaultPubsubTopic), contentTopics: @[DefaultContentTopic], - paginationLimit: some(uint64(0)), + paginationLimit: Opt.some(uint64(0)), ) invalidQuery5 = StoreQueryRequest( - pubsubTopic: some(DefaultPubsubTopic), + pubsubTopic: Opt.some(DefaultPubsubTopic), contentTopics: @[DefaultContentTopic], - startTime: some(0.Timestamp), - endTime: some(0.Timestamp), + startTime: Opt.some(0.Timestamp), + endTime: Opt.some(0.Timestamp), ) invalidQuery6 = StoreQueryRequest( - pubsubTopic: some(DefaultPubsubTopic), + pubsubTopic: Opt.some(DefaultPubsubTopic), contentTopics: @[DefaultContentTopic], - startTime: some(0.Timestamp), - endTime: some(-1.Timestamp), + startTime: Opt.some(0.Timestamp), + endTime: Opt.some(-1.Timestamp), ) # When the query is sent to the server diff --git a/tests/waku_store/test_resume.nim b/tests/waku_store/test_resume.nim index 612aa1e1d..c8bf1bbad 100644 --- a/tests/waku_store/test_resume.nim +++ b/tests/waku_store/test_resume.nim @@ -1,6 +1,6 @@ {.used.} -import std/[options, net], testutils/unittests, chronos, results +import std/net, testutils/unittests, chronos, results import logos_delivery/waku/[ diff --git a/tests/waku_store/test_rpc_codec.nim b/tests/waku_store/test_rpc_codec.nim index 43543560a..3821aea98 100644 --- a/tests/waku_store/test_rpc_codec.nim +++ b/tests/waku_store/test_rpc_codec.nim @@ -1,6 +1,6 @@ {.used.} -import std/options, testutils/unittests, chronos +import results, testutils/unittests, chronos import logos_delivery/waku/ [common/protobuf, common/paging, waku_core, waku_store/common, waku_store/rpc_codec], @@ -12,14 +12,14 @@ procSuite "Waku Store - RPC codec": let query = StoreQueryRequest( requestId: "0", includeData: true, - pubsubTopic: some(DefaultPubsubTopic), + pubsubTopic: Opt.some(DefaultPubsubTopic), contentTopics: @[DefaultContentTopic], - startTime: some(Timestamp(10)), - endTime: some(Timestamp(11)), + startTime: Opt.some(Timestamp(10)), + endTime: Opt.some(Timestamp(11)), messageHashes: @[], - paginationCursor: none(WakuMessageHash), + paginationCursor: Opt.none(WakuMessageHash), paginationForward: PagingDirection.FORWARD, - paginationLimit: some(DefaultPageSize), + paginationLimit: Opt.some(DefaultPageSize), ) ## When @@ -56,14 +56,16 @@ procSuite "Waku Store - RPC codec": message = fakeWakuMessage() hash = computeMessageHash(DefaultPubsubTopic, message) keyValue = WakuMessageKeyValue( - messageHash: hash, message: some(message), pubsubTopic: some(DefaultPubsubTopic) + messageHash: hash, + message: Opt.some(message), + pubsubTopic: Opt.some(DefaultPubsubTopic), ) res = StoreQueryResponse( requestId: "1", statusCode: 200, statusDesc: "it's fine", messages: @[keyValue], - paginationCursor: none(WakuMessageHash), + paginationCursor: Opt.none(WakuMessageHash), ) ## When diff --git a/tests/waku_store/test_waku_store.nim b/tests/waku_store/test_waku_store.nim index b210e6b44..74f8be6a6 100644 --- a/tests/waku_store/test_waku_store.nim +++ b/tests/waku_store/test_waku_store.nim @@ -1,6 +1,6 @@ {.used.} -import std/options, testutils/unittests, chronos, libp2p/crypto/crypto +import results, testutils/unittests, chronos, libp2p/crypto/crypto import logos_delivery/waku/[ @@ -30,7 +30,9 @@ suite "Waku Store - query handler": let msg = fakeWakuMessage(contentTopic = DefaultContentTopic) let hash = computeMessageHash(DefaultPubsubTopic, msg) let kv = WakuMessageKeyValue( - messageHash: hash, message: some(msg), pubsubTopic: some(DefaultPubsubTopic) + messageHash: hash, + message: Opt.some(msg), + pubsubTopic: Opt.some(DefaultPubsubTopic), ) var queryHandlerFut = newFuture[(StoreQueryRequest)]() diff --git a/tests/waku_store/test_wakunode_store.nim b/tests/waku_store/test_wakunode_store.nim index 9c067488a..9d5ab6981 100644 --- a/tests/waku_store/test_wakunode_store.nim +++ b/tests/waku_store/test_wakunode_store.nim @@ -1,7 +1,8 @@ {.used.} import - std/[sequtils, options], + results, + std/sequtils, testutils/unittests, chronicles, chronos, @@ -49,7 +50,9 @@ procSuite "WakuNode - Store": let kvs = zip(hashes, msgListA).mapIt( WakuMessageKeyValue( - messageHash: it[0], message: some(it[1]), pubsubTopic: some(DefaultPubsubTopic) + messageHash: it[0], + message: Opt.some(it[1]), + pubsubTopic: Opt.some(DefaultPubsubTopic), ) ) @@ -119,7 +122,7 @@ procSuite "WakuNode - Store": includeData: true, contentTopics: @[DefaultContentTopic], paginationForward: PagingDirection.FORWARD, - paginationLimit: some(uint64(7)), + paginationLimit: Opt.some(uint64(7)), ) let serverPeer = server.peerInfo.toRemotePeerInfo() @@ -127,7 +130,7 @@ procSuite "WakuNode - Store": var nextReq = req # copy var pages = newSeq[seq[WakuMessageKeyValue]](2) - var cursors = newSeq[Option[WakuMessageHash]](2) + var cursors = newSeq[Opt[WakuMessageHash]](2) for i in 0 ..< 2: let res = waitFor client.query(nextReq, peer = serverPeer) @@ -143,8 +146,8 @@ procSuite "WakuNode - Store": ## Then check: - cursors[0] == some(kvs[6].messageHash) - cursors[1] == none(WakuMessageHash) + cursors[0] == Opt.some(kvs[6].messageHash) + cursors[1] == Opt.none(WakuMessageHash) check: pages[0] == kvs[0 .. 6] @@ -174,7 +177,7 @@ procSuite "WakuNode - Store": let req = StoreQueryRequest( includeData: true, contentTopics: @[DefaultContentTopic], - paginationLimit: some(uint64(7)), + paginationLimit: Opt.some(uint64(7)), paginationForward: PagingDirection.BACKWARD, ) let serverPeer = server.peerInfo.toRemotePeerInfo() @@ -183,7 +186,7 @@ procSuite "WakuNode - Store": var nextReq = req # copy var pages = newSeq[seq[WakuMessageKeyValue]](2) - var cursors = newSeq[Option[WakuMessageHash]](2) + var cursors = newSeq[Opt[WakuMessageHash]](2) for i in 0 ..< 2: let res = waitFor client.query(nextReq, peer = serverPeer) @@ -199,8 +202,8 @@ procSuite "WakuNode - Store": ## Then check: - cursors[0] == some(kvs[3].messageHash) - cursors[1] == none(WakuMessageHash) + cursors[0] == Opt.some(kvs[3].messageHash) + cursors[1] == Opt.none(WakuMessageHash) check: pages[0] == kvs[3 .. 9] @@ -249,7 +252,7 @@ procSuite "WakuNode - Store": server.wakuFilterClient.registerPushHandler(filterHandler) let resp = waitFor server.filterSubscribe( - some(DefaultPubsubTopic), DefaultContentTopic, peer = filterSourcePeer + Opt.some(DefaultPubsubTopic), DefaultContentTopic, peer = filterSourcePeer ) waitFor sleepAsync(100.millis) @@ -272,8 +275,8 @@ procSuite "WakuNode - Store": response.messages[0] == WakuMessageKeyValue( messageHash: hash, - message: some(message), - pubsubTopic: some(DefaultPubSubTopic), + message: Opt.some(message), + pubsubTopic: Opt.some(DefaultPubSubTopic), ) let (handledPubsubTopic, handledMsg) = filterFut.read() @@ -309,7 +312,7 @@ procSuite "WakuNode - Store": ## Given let req = StoreQueryRequest( - contentTopics: @[DefaultContentTopic], paginationCursor: some(cursor) + contentTopics: @[DefaultContentTopic], paginationCursor: Opt.some(cursor) ) let serverPeer = server.peerInfo.toRemotePeerInfo() diff --git a/tests/waku_store_sync/sync_utils.nim b/tests/waku_store_sync/sync_utils.nim index 38538b354..21d75dd97 100644 --- a/tests/waku_store_sync/sync_utils.nim +++ b/tests/waku_store_sync/sync_utils.nim @@ -1,4 +1,4 @@ -import std/[options, random], chronos, chronicles +import std/random, chronos, chronicles import logos_delivery/waku/[ diff --git a/tests/waku_store_sync/test_codec.nim b/tests/waku_store_sync/test_codec.nim index c9bce7111..2d6d6185c 100644 --- a/tests/waku_store_sync/test_codec.nim +++ b/tests/waku_store_sync/test_codec.nim @@ -1,6 +1,6 @@ {.used.} -import std/[options, random], testutils/unittests, chronos +import std/random, testutils/unittests, chronos import ../../logos_delivery/waku/waku_core, diff --git a/tests/waku_store_sync/test_protocol.nim b/tests/waku_store_sync/test_protocol.nim index 62fd568a1..2d2eed707 100644 --- a/tests/waku_store_sync/test_protocol.nim +++ b/tests/waku_store_sync/test_protocol.nim @@ -1,7 +1,8 @@ {.used.} import - std/[options, sets, random, math, algorithm], + results, + std/[sets, random, math, algorithm], testutils/unittests, chronos, libp2p/crypto/crypto @@ -80,7 +81,7 @@ suite "Waku Sync: reconciliation": idsChannel.len == 0 remoteNeeds.len == 0 - let res = await client.storeSynchronization(some(serverPeerInfo)) + let res = await client.storeSynchronization(Opt.some(serverPeerInfo)) assert res.isOk(), res.error check: @@ -114,7 +115,7 @@ suite "Waku Sync: reconciliation": remoteNeeds.contains((clientPeerInfo.peerId, hash2)) == false remoteNeeds.contains((clientPeerInfo.peerId, hash3)) == false - let res = await client.storeSynchronization(some(serverPeerInfo)) + let res = await client.storeSynchronization(Opt.some(serverPeerInfo)) assert res.isOk(), res.error check: @@ -150,7 +151,7 @@ suite "Waku Sync: reconciliation": remoteNeeds.contains((serverPeerInfo.peerId, hash2)) == false remoteNeeds.contains((serverPeerInfo.peerId, hash3)) == false - let res = await client.storeSynchronization(some(serverPeerInfo)) + let res = await client.storeSynchronization(Opt.some(serverPeerInfo)) assert res.isOk(), res.error check: @@ -186,7 +187,7 @@ suite "Waku Sync: reconciliation": remoteNeeds.contains((serverPeerInfo.peerId, hash3)) == false remoteNeeds.contains((clientPeerInfo.peerId, hash2)) == false - var syncRes = await client.storeSynchronization(some(serverPeerInfo)) + var syncRes = await client.storeSynchronization(Opt.some(serverPeerInfo)) assert syncRes.isOk(), $syncRes.error check: @@ -240,7 +241,7 @@ suite "Waku Sync: reconciliation": check: remoteNeeds.len == 0 - var syncRes = await client.storeSynchronization(some(serverPeerInfo)) + var syncRes = await client.storeSynchronization(Opt.some(serverPeerInfo)) assert syncRes.isOk(), $syncRes.error check: @@ -270,7 +271,7 @@ suite "Waku Sync: reconciliation": check: remoteNeeds.len == 0 - let res = await client.storeSynchronization(some(serverPeerInfo)) + let res = await client.storeSynchronization(Opt.some(serverPeerInfo)) assert res.isOk(), $res.error check: @@ -312,7 +313,7 @@ suite "Waku Sync: reconciliation": remoteNeeds.len == 0 remoteNeeds.contains((clientPeerInfo.peerId, WakuMessageHash(diff))) == false - let res = await client.storeSynchronization(some(serverPeerInfo)) + let res = await client.storeSynchronization(Opt.some(serverPeerInfo)) assert res.isOk(), $res.error check: @@ -355,7 +356,7 @@ suite "Waku Sync: reconciliation": check remoteNeeds.len == 0 ## ── launch reconciliation from the client towards the server ───────── - let res = await client.storeSynchronization(some(serverPeerInfo)) + let res = await client.storeSynchronization(Opt.some(serverPeerInfo)) assert res.isOk(), $res.error ## ── verify that ≈1000 diffs were queued (allow 10 % slack) ──────────── @@ -398,7 +399,7 @@ suite "Waku Sync: reconciliation": check remoteNeeds.len == 0 - let res = await client.storeSynchronization(some(serverPeerInfo)) + let res = await client.storeSynchronization(Opt.some(serverPeerInfo)) assert res.isOk(), $res.error check remoteNeeds.len >= diffCount - tol and remoteNeeds.len < diffCount @@ -444,7 +445,7 @@ suite "Waku Sync: reconciliation": check remoteNeeds.len == 0 - let res = await client.storeSynchronization(some(serverPeerInfo)) + let res = await client.storeSynchronization(Opt.some(serverPeerInfo)) assert res.isOk(), $res.error check remoteNeeds.len == diffCount @@ -497,7 +498,7 @@ suite "Waku Sync: reconciliation": check remoteNeeds.len == 0 - let res = await client.storeSynchronization(some(serverPeerInfo)) + let res = await client.storeSynchronization(Opt.some(serverPeerInfo)) assert res.isOk(), $res.error check remoteNeeds.len == diffCount @@ -564,7 +565,7 @@ suite "Waku Sync: reconciliation": await server.stop() await client.stop() - let res = await client.storeSynchronization(some(serverPeerInfo)) + let res = await client.storeSynchronization(Opt.some(serverPeerInfo)) assert res.isOk(), $res.error check remoteNeeds.len == diffInWin @@ -613,7 +614,7 @@ suite "Waku Sync: reconciliation": await server.stop() await client.stop() - let res = await client.storeSynchronization(some(serverPeerInfo)) + let res = await client.storeSynchronization(Opt.some(serverPeerInfo)) assert res.isOk(), $res.error check remoteNeeds.len == 1 @@ -660,7 +661,7 @@ suite "Waku Sync: reconciliation": await server.stop() await client.stop() - let res = await client.storeSynchronization(some(serverPeerInfo)) + let res = await client.storeSynchronization(Opt.some(serverPeerInfo)) assert res.isOk(), $res.error check remoteNeeds.len == 1 @@ -704,7 +705,7 @@ suite "Waku Sync: reconciliation": await server.stop() await client.stop() - let res = await client.storeSynchronization(some(serverPeerInfo)) + let res = await client.storeSynchronization(Opt.some(serverPeerInfo)) assert res.isOk(), $res.error check remoteNeeds.len == 1 @@ -739,7 +740,7 @@ suite "Waku Sync: reconciliation": await server.stop() await client.stop() - let res = await client.storeSynchronization(some(serverPeerInfo)) + let res = await client.storeSynchronization(Opt.some(serverPeerInfo)) assert res.isOk(), $res.error check remoteNeeds.len == 1 @@ -776,7 +777,7 @@ suite "Waku Sync: reconciliation": await server.stop() await client.stop() - let res = await client.storeSynchronization(some(serverPeerInfo)) + let res = await client.storeSynchronization(Opt.some(serverPeerInfo)) assert res.isOk(), $res.error check needsQ.len == 0 diff --git a/tests/waku_store_sync/test_storage.nim b/tests/waku_store_sync/test_storage.nim index ba0879375..35b637215 100644 --- a/tests/waku_store_sync/test_storage.nim +++ b/tests/waku_store_sync/test_storage.nim @@ -1,6 +1,6 @@ {.used.} -import std/[options, random, sequtils, packedsets], testutils/unittests, chronos +import results, std/[random, sequtils, packedsets], testutils/unittests, chronos import ../../logos_delivery/waku/waku_core, @@ -218,7 +218,7 @@ suite "Waku Sync Storage": let before = getMonoTime() - discard storage.fingerprinting(some(0 .. count)) + discard storage.fingerprinting(Opt.some(0 .. count)) let after = getMonoTime() diff --git a/tests/wakunode2/test_app.nim b/tests/wakunode2/test_app.nim index 879dcd7b5..e9a0ecd47 100644 --- a/tests/wakunode2/test_app.nim +++ b/tests/wakunode2/test_app.nim @@ -1,4 +1,3 @@ -import logos_delivery/waku/compat/option_valueor {.used.} import diff --git a/tests/wakunode2/test_cli_args.nim b/tests/wakunode2/test_cli_args.nim index 5b21bd327..4578e1cec 100644 --- a/tests/wakunode2/test_cli_args.nim +++ b/tests/wakunode2/test_cli_args.nim @@ -1,7 +1,7 @@ {.used.} import - std/[options, strutils], + std/strutils, testutils/unittests, chronos, libp2p/crypto/[crypto, secp], diff --git a/tests/wakunode2/test_validators.nim b/tests/wakunode2/test_validators.nim index fc4c2cf57..95b07828e 100644 --- a/tests/wakunode2/test_validators.nim +++ b/tests/wakunode2/test_validators.nim @@ -1,7 +1,8 @@ {.used.} import - std/[sequtils, sysrand, math, options], + results, + std/[sequtils, sysrand, math], testutils/unittests, chronos, libp2p/crypto/crypto, @@ -86,7 +87,7 @@ suite "WakuNode2 - Validators": msg.meta = secretKey.sign(SkMessage(spamProtectedShard.msgHash(msg))).toRaw()[0 .. 63] - discard await nodes[i].publish(some($spamProtectedShard), msg) + discard await nodes[i].publish(Opt.some($spamProtectedShard), msg) # Wait for gossip await sleepAsync(2.seconds) @@ -177,7 +178,7 @@ suite "WakuNode2 - Validators": 0 .. 63 ] - discard await nodes[i].publish(some($spamProtectedShard), msg) + discard await nodes[i].publish(Opt.some($spamProtectedShard), msg) # Each node sends 5 messages that are not signed (total = 25) for i in 0 ..< 5: @@ -189,7 +190,7 @@ suite "WakuNode2 - Validators": timestamp: now(), ephemeral: true, ) - discard await nodes[i].publish(some($spamProtectedShard), unsignedMessage) + discard await nodes[i].publish(Opt.some($spamProtectedShard), unsignedMessage) # Each node sends 5 messages that dont contain timestamp (total = 25) for i in 0 ..< 5: @@ -201,7 +202,7 @@ suite "WakuNode2 - Validators": timestamp: 0, ephemeral: true, ) - discard await nodes[i].publish(some($spamProtectedShard), unsignedMessage) + discard await nodes[i].publish(Opt.some($spamProtectedShard), unsignedMessage) # Each node sends 5 messages way BEFORE than the current timestmap (total = 25) for i in 0 ..< 5: @@ -214,7 +215,7 @@ suite "WakuNode2 - Validators": timestamp: beforeTimestamp, ephemeral: true, ) - discard await nodes[i].publish(some($spamProtectedShard), unsignedMessage) + discard await nodes[i].publish(Opt.some($spamProtectedShard), unsignedMessage) # Each node sends 5 messages way LATER than the current timestmap (total = 25) for i in 0 ..< 5: @@ -227,7 +228,7 @@ suite "WakuNode2 - Validators": timestamp: afterTimestamp, ephemeral: true, ) - discard await nodes[i].publish(some($spamProtectedShard), unsignedMessage) + discard await nodes[i].publish(Opt.some($spamProtectedShard), unsignedMessage) # Since we have a full mesh with 5 nodes and each one publishes 25+25+25+25+25 msgs # there are 625 messages being sent. @@ -325,7 +326,7 @@ suite "WakuNode2 - Validators": timestamp: now(), ephemeral: true, ) - discard await nodes[0].publish(some($spamProtectedShard), unsignedMessage) + discard await nodes[0].publish(Opt.some($spamProtectedShard), unsignedMessage) # nodes[0] spams 50 wrongly signed messages (nodes[0] just knows of nodes[1]) for j in 0 ..< 50: @@ -339,7 +340,7 @@ suite "WakuNode2 - Validators": # Sign the message with a wrong key msg.meta = wrongSecretKey.sign(SkMessage(spamProtectedShard.msgHash(msg))).toRaw()[0 .. 63] - discard await nodes[0].publish(some($spamProtectedShard), msg) + discard await nodes[0].publish(Opt.some($spamProtectedShard), msg) # Wait for gossip await sleepAsync(2.seconds) diff --git a/tests/wakunode_rest/test_rest_cors.nim b/tests/wakunode_rest/test_rest_cors.nim index 5a57e0a9a..1ee92e804 100644 --- a/tests/wakunode_rest/test_rest_cors.nim +++ b/tests/wakunode_rest/test_rest_cors.nim @@ -1,4 +1,4 @@ -import std/options +import results {.used.} import @@ -28,7 +28,7 @@ proc testWakuNode(): WakuNode = extIp = parseIpAddress("127.0.0.1") port = Port(0) - newTestWakuNode(privkey, bindIp, port, some(extIp), some(port)) + newTestWakuNode(privkey, bindIp, port, Opt.some(extIp), Opt.some(port)) proc fetchWithHeader( request: HttpClientRequestRef @@ -52,7 +52,7 @@ proc fetchWithHeader( assert false proc issueRequest( - address: HttpAddress, reqOrigin: Option[string] = none(string) + address: HttpAddress, reqOrigin: Opt[string] = Opt.none(string) ): Future[TestResponseTuple] {.async.} = var session = HttpSessionRef.new({HttpClientFlag.Http11Pipeline}) @@ -72,7 +72,7 @@ proc issueRequest( return data proc checkResponse( - response: TestResponseTuple, expectedStatus: int, expectedOrigin: Option[string] + response: TestResponseTuple, expectedStatus: int, expectedOrigin: Opt[string] ): bool = if response.status != expectedStatus: echo( @@ -111,8 +111,9 @@ suite "Waku v2 REST API CORS Handling": .init( restAddress, restPort, - allowedOrigin = - some("test.net:1234,https://localhost:*,http://127.0.0.1:?8,?waku*.net:*80*"), + allowedOrigin = Opt.some( + "test.net:1234,https://localhost:*,http://127.0.0.1:?8,?waku*.net:*80*" + ), ) .tryGet() restPort = restServer.httpServer.address.port # update with bound port for client use @@ -124,29 +125,29 @@ suite "Waku v2 REST API CORS Handling": let ha = getAddress(srvAddr, HttpClientScheme.NonSecure, "/debug/v1/info") # When - var response = await issueRequest(ha, some("http://test.net:1234")) - check checkResponse(response, 200, some("http://test.net:1234")) + var response = await issueRequest(ha, Opt.some("http://test.net:1234")) + check checkResponse(response, 200, Opt.some("http://test.net:1234")) - response = await issueRequest(ha, some("https://test.net:1234")) - check checkResponse(response, 200, some("https://test.net:1234")) + response = await issueRequest(ha, Opt.some("https://test.net:1234")) + check checkResponse(response, 200, Opt.some("https://test.net:1234")) - response = await issueRequest(ha, some("https://localhost:8080")) - check checkResponse(response, 200, some("https://localhost:8080")) + response = await issueRequest(ha, Opt.some("https://localhost:8080")) + check checkResponse(response, 200, Opt.some("https://localhost:8080")) - response = await issueRequest(ha, some("https://localhost:80")) - check checkResponse(response, 200, some("https://localhost:80")) + response = await issueRequest(ha, Opt.some("https://localhost:80")) + check checkResponse(response, 200, Opt.some("https://localhost:80")) - response = await issueRequest(ha, some("http://127.0.0.1:78")) - check checkResponse(response, 200, some("http://127.0.0.1:78")) + response = await issueRequest(ha, Opt.some("http://127.0.0.1:78")) + check checkResponse(response, 200, Opt.some("http://127.0.0.1:78")) - response = await issueRequest(ha, some("http://wakuTHE.net:8078")) - check checkResponse(response, 200, some("http://wakuTHE.net:8078")) + response = await issueRequest(ha, Opt.some("http://wakuTHE.net:8078")) + check checkResponse(response, 200, Opt.some("http://wakuTHE.net:8078")) - response = await issueRequest(ha, some("http://nwaku.main.net:1980")) - check checkResponse(response, 200, some("http://nwaku.main.net:1980")) + response = await issueRequest(ha, Opt.some("http://nwaku.main.net:1980")) + check checkResponse(response, 200, Opt.some("http://nwaku.main.net:1980")) - response = await issueRequest(ha, some("http://nwaku.main.net:80")) - check checkResponse(response, 200, some("http://nwaku.main.net:80")) + response = await issueRequest(ha, Opt.some("http://nwaku.main.net:80")) + check checkResponse(response, 200, Opt.some("http://nwaku.main.net:80")) await restServer.stop() await restServer.closeWait() @@ -165,8 +166,9 @@ suite "Waku v2 REST API CORS Handling": .init( restAddress, restPort, - allowedOrigin = - some("test.net:1234,https://localhost:*,http://127.0.0.1:?8,?waku*.net:*80*"), + allowedOrigin = Opt.some( + "test.net:1234,https://localhost:*,http://127.0.0.1:?8,?waku*.net:*80*" + ), ) .tryGet() restPort = restServer.httpServer.address.port # update with bound port for client use @@ -178,32 +180,32 @@ suite "Waku v2 REST API CORS Handling": let ha = getAddress(srvAddr, HttpClientScheme.NonSecure, "/debug/v1/info") # When - var response = await issueRequest(ha, some("http://test.net:12334")) - check checkResponse(response, 403, none(string)) + var response = await issueRequest(ha, Opt.some("http://test.net:12334")) + check checkResponse(response, 403, Opt.none(string)) - response = await issueRequest(ha, some("http://test.net:12345")) - check checkResponse(response, 403, none(string)) + response = await issueRequest(ha, Opt.some("http://test.net:12345")) + check checkResponse(response, 403, Opt.none(string)) - response = await issueRequest(ha, some("xhttp://test.net:1234")) - check checkResponse(response, 403, none(string)) + response = await issueRequest(ha, Opt.some("xhttp://test.net:1234")) + check checkResponse(response, 403, Opt.none(string)) - response = await issueRequest(ha, some("https://xtest.net:1234")) - check checkResponse(response, 403, none(string)) + response = await issueRequest(ha, Opt.some("https://xtest.net:1234")) + check checkResponse(response, 403, Opt.none(string)) - response = await issueRequest(ha, some("http://localhost:8080")) - check checkResponse(response, 403, none(string)) + response = await issueRequest(ha, Opt.some("http://localhost:8080")) + check checkResponse(response, 403, Opt.none(string)) - response = await issueRequest(ha, some("https://127.0.0.1:78")) - check checkResponse(response, 403, none(string)) + response = await issueRequest(ha, Opt.some("https://127.0.0.1:78")) + check checkResponse(response, 403, Opt.none(string)) - response = await issueRequest(ha, some("http://127.0.0.1:89")) - check checkResponse(response, 403, none(string)) + response = await issueRequest(ha, Opt.some("http://127.0.0.1:89")) + check checkResponse(response, 403, Opt.none(string)) - response = await issueRequest(ha, some("http://the.waku.net:8078")) - check checkResponse(response, 403, none(string)) + response = await issueRequest(ha, Opt.some("http://the.waku.net:8078")) + check checkResponse(response, 403, Opt.none(string)) - response = await issueRequest(ha, some("http://nwaku.main.net:1900")) - check checkResponse(response, 403, none(string)) + response = await issueRequest(ha, Opt.some("http://nwaku.main.net:1900")) + check checkResponse(response, 403, Opt.none(string)) await restServer.stop() await restServer.closeWait() @@ -218,8 +220,9 @@ suite "Waku v2 REST API CORS Handling": var restPort = Port(0) let restAddress = parseIpAddress("0.0.0.0") - let restServer = - WakuRestServerRef.init(restAddress, restPort, allowedOrigin = some("*")).tryGet() + let restServer = WakuRestServerRef + .init(restAddress, restPort, allowedOrigin = Opt.some("*")) + .tryGet() restPort = restServer.httpServer.address.port # update with bound port for client use installDebugApiHandlers(restServer.router, node) @@ -229,29 +232,29 @@ suite "Waku v2 REST API CORS Handling": let ha = getAddress(srvAddr, HttpClientScheme.NonSecure, "/debug/v1/info") # When - var response = await issueRequest(ha, some("http://test.net:1234")) - check checkResponse(response, 200, some("*")) + var response = await issueRequest(ha, Opt.some("http://test.net:1234")) + check checkResponse(response, 200, Opt.some("*")) - response = await issueRequest(ha, some("https://test.net:1234")) - check checkResponse(response, 200, some("*")) + response = await issueRequest(ha, Opt.some("https://test.net:1234")) + check checkResponse(response, 200, Opt.some("*")) - response = await issueRequest(ha, some("https://localhost:8080")) - check checkResponse(response, 200, some("*")) + response = await issueRequest(ha, Opt.some("https://localhost:8080")) + check checkResponse(response, 200, Opt.some("*")) - response = await issueRequest(ha, some("https://localhost:80")) - check checkResponse(response, 200, some("*")) + response = await issueRequest(ha, Opt.some("https://localhost:80")) + check checkResponse(response, 200, Opt.some("*")) - response = await issueRequest(ha, some("http://127.0.0.1:78")) - check checkResponse(response, 200, some("*")) + response = await issueRequest(ha, Opt.some("http://127.0.0.1:78")) + check checkResponse(response, 200, Opt.some("*")) - response = await issueRequest(ha, some("http://wakuTHE.net:8078")) - check checkResponse(response, 200, some("*")) + response = await issueRequest(ha, Opt.some("http://wakuTHE.net:8078")) + check checkResponse(response, 200, Opt.some("*")) - response = await issueRequest(ha, some("http://nwaku.main.net:1980")) - check checkResponse(response, 200, some("*")) + response = await issueRequest(ha, Opt.some("http://nwaku.main.net:1980")) + check checkResponse(response, 200, Opt.some("*")) - response = await issueRequest(ha, some("http://nwaku.main.net:80")) - check checkResponse(response, 200, some("*")) + response = await issueRequest(ha, Opt.some("http://nwaku.main.net:80")) + check checkResponse(response, 200, Opt.some("*")) await restServer.stop() await restServer.closeWait() @@ -270,8 +273,9 @@ suite "Waku v2 REST API CORS Handling": .init( restAddress, restPort, - allowedOrigin = - some("test.net:1234,https://localhost:*,http://127.0.0.1:?8,?waku*.net:*80*"), + allowedOrigin = Opt.some( + "test.net:1234,https://localhost:*,http://127.0.0.1:?8,?waku*.net:*80*" + ), ) .tryGet() restPort = restServer.httpServer.address.port # update with bound port for client use @@ -283,8 +287,8 @@ suite "Waku v2 REST API CORS Handling": let ha = getAddress(srvAddr, HttpClientScheme.NonSecure, "/debug/v1/info") # When - var response = await issueRequest(ha, none(string)) - check checkResponse(response, 200, none(string)) + var response = await issueRequest(ha, Opt.none(string)) + check checkResponse(response, 200, Opt.none(string)) await restServer.stop() await restServer.closeWait() diff --git a/tests/wakunode_rest/test_rest_debug.nim b/tests/wakunode_rest/test_rest_debug.nim index 8885c8230..c10913cb8 100644 --- a/tests/wakunode_rest/test_rest_debug.nim +++ b/tests/wakunode_rest/test_rest_debug.nim @@ -1,7 +1,7 @@ {.used.} import - std/options, + results, testutils/unittests, presto, presto/client as presto_client, @@ -30,7 +30,7 @@ proc testWakuNode(): WakuNode = extIp = parseIpAddress("127.0.0.1") port = Port(0) - newTestWakuNode(privkey, bindIp, port, some(extIp), some(port)) + newTestWakuNode(privkey, bindIp, port, Opt.some(extIp), Opt.some(port)) suite "Waku v2 REST API - Debug": asyncTest "Get node info - GET /info": diff --git a/tests/wakunode_rest/test_rest_debug_serdes.nim b/tests/wakunode_rest/test_rest_debug_serdes.nim index bdc3ed57f..305bb984f 100644 --- a/tests/wakunode_rest/test_rest_debug_serdes.nim +++ b/tests/wakunode_rest/test_rest_debug_serdes.nim @@ -1,4 +1,3 @@ -import std/options {.used.} import results, stew/byteutils, testutils/unittests, json_serialization @@ -25,7 +24,7 @@ suite "Waku v2 REST API - Debug - serialization": suite "DebugWakuInfo - encode": test "optional field is none": # Given - let data = DebugWakuInfo(listenAddresses: @["GO"], enrUri: none(string)) + let data = DebugWakuInfo(listenAddresses: @["GO"], enrUri: Opt.none(string)) # When let res = encodeIntoJsonBytes(data) diff --git a/tests/wakunode_rest/test_rest_filter.nim b/tests/wakunode_rest/test_rest_filter.nim index b20e67e59..24af0572a 100644 --- a/tests/wakunode_rest/test_rest_filter.nim +++ b/tests/wakunode_rest/test_rest_filter.nim @@ -1,4 +1,4 @@ -import std/options +import results {.used.} import @@ -36,7 +36,7 @@ proc testWakuNode(): WakuNode = extIp = parseIpAddress("127.0.0.1") port = Port(0) - return newTestWakuNode(privkey, bindIp, port, some(extIp), some(port)) + return newTestWakuNode(privkey, bindIp, port, Opt.some(extIp), Opt.some(port)) type RestFilterTest = object serviceNode: WakuNode @@ -116,7 +116,7 @@ suite "Waku v2 Rest API - Filter V2": let requestBody = FilterSubscribeRequest( requestId: "1234", contentFilters: contentFilters, - pubsubTopic: some(DefaultPubsubTopic), + pubsubTopic: Opt.some(DefaultPubsubTopic), ) let response = await restFilterTest.client.filterPostSubscriptions(requestBody) @@ -148,7 +148,7 @@ suite "Waku v2 Rest API - Filter V2": # When - error case let badRequestBody = FilterSubscribeRequest( - requestId: "4567", contentFilters: @[], pubsubTopic: none(string) + requestId: "4567", contentFilters: @[], pubsubTopic: Opt.none(string) ) let badRequestResp = await restFilterTest.client.filterPostSubscriptions(badRequestBody) @@ -173,7 +173,7 @@ suite "Waku v2 Rest API - Filter V2": requestId: "1234", contentFilters: @[ContentTopic("1"), ContentTopic("2"), ContentTopic("3"), ContentTopic("4")], - pubsubTopic: some(DefaultPubsubTopic), + pubsubTopic: Opt.some(DefaultPubsubTopic), ) discard await restFilterTest.client.filterPostSubscriptions(requestBody) @@ -186,7 +186,7 @@ suite "Waku v2 Rest API - Filter V2": let requestBodyUnsub = FilterUnsubscribeRequest( requestId: "4321", contentFilters: contentFilters, - pubsubTopic: some(DefaultPubsubTopic), + pubsubTopic: Opt.some(DefaultPubsubTopic), ) let response = await restFilterTest.client.filterDeleteSubscriptions(requestBodyUnsub) @@ -243,7 +243,7 @@ suite "Waku v2 Rest API - Filter V2": var requestBody = FilterSubscribeRequest( requestId: "1234", contentFilters: @[ContentTopic("1")], - pubsubTopic: some(DefaultPubsubTopic), + pubsubTopic: Opt.some(DefaultPubsubTopic), ) discard await restFilterTest.client.filterPostSubscriptions(requestBody) @@ -294,7 +294,7 @@ suite "Waku v2 Rest API - Filter V2": var requestBody = FilterSubscribeRequest( requestId: "1234", contentFilters: @[ContentTopic("1")], - pubsubTopic: some(DefaultPubsubTopic), + pubsubTopic: Opt.some(DefaultPubsubTopic), ) discard await restFilterTest.client.filterPostSubscriptions(requestBody) @@ -346,7 +346,7 @@ suite "Waku v2 Rest API - Filter V2": let requestBody = FilterSubscribeRequest( requestId: "1001", contentFilters: @[DefaultContentTopic], - pubsubTopic: some(DefaultPubsubTopic), + pubsubTopic: Opt.some(DefaultPubsubTopic), ) let response = await restFilterTest.client.filterPostSubscriptions(requestBody) @@ -425,7 +425,7 @@ suite "Waku v2 Rest API - Filter V2": let requestBody = FilterSubscribeRequest( requestId: "1001", contentFilters: @[DefaultContentTopic], - pubsubTopic: some(DefaultPubsubTopic), + pubsubTopic: Opt.some(DefaultPubsubTopic), ) let response = await restFilterTest.client.filterPostSubscriptions(requestBody) diff --git a/tests/wakunode_rest/test_rest_health.nim b/tests/wakunode_rest/test_rest_health.nim index 4a2fa0250..bebdb9db7 100644 --- a/tests/wakunode_rest/test_rest_health.nim +++ b/tests/wakunode_rest/test_rest_health.nim @@ -1,7 +1,8 @@ {.used.} import - std/[tempfiles, osproc, options], + results, + std/[tempfiles, osproc], testutils/unittests, presto, presto/client as presto_client, @@ -34,7 +35,7 @@ proc testWakuNode(): WakuNode = extIp = parseIpAddress("127.0.0.1") port = Port(0) - newTestWakuNode(privkey, bindIp, port, some(extIp), some(port)) + newTestWakuNode(privkey, bindIp, port, Opt.some(extIp), Opt.some(port)) suite "Waku v2 REST API - health": # TODO: better test for health @@ -42,7 +43,7 @@ suite "Waku v2 REST API - health": var manager {.threadVar.}: OnchainGroupManager setup: - anvilProc = runAnvil(stateFile = some(DEFAULT_ANVIL_STATE_PATH)) + anvilProc = runAnvil(stateFile = Opt.some(DEFAULT_ANVIL_STATE_PATH)) manager = waitFor setupOnchainGroupManager(deployContracts = false) teardown: @@ -89,7 +90,7 @@ suite "Waku v2 REST API - health": report.protocolsHealth.len() == 13 report.getHealth(RelayProtocol).health == HealthStatus.NOT_READY - report.getHealth(RelayProtocol).desc == some("No connected peers") + report.getHealth(RelayProtocol).desc == Opt.some("No connected peers") report.getHealth(RlnRelayProtocol).health == HealthStatus.READY @@ -103,14 +104,14 @@ suite "Waku v2 REST API - health": report.getHealth(LightpushClientProtocol).health == HealthStatus.NOT_READY report.getHealth(LightpushClientProtocol).desc == - some("No Lightpush service peer available yet") + Opt.some("No Lightpush service peer available yet") report.getHealth(LegacyLightpushClientProtocol).health == HealthStatus.NOT_MOUNTED report.getHealth(StoreClientProtocol).health == HealthStatus.NOT_MOUNTED report.getHealth(FilterClientProtocol).health == HealthStatus.NOT_READY report.getHealth(FilterClientProtocol).desc == - some("No Filter service peer available yet") + Opt.some("No Filter service peer available yet") await restServer.stop() await restServer.closeWait() diff --git a/tests/wakunode_rest/test_rest_lightpush.nim b/tests/wakunode_rest/test_rest_lightpush.nim index ff602328a..2c03a10da 100644 --- a/tests/wakunode_rest/test_rest_lightpush.nim +++ b/tests/wakunode_rest/test_rest_lightpush.nim @@ -1,4 +1,4 @@ -import std/options +import results {.used.} import @@ -35,7 +35,7 @@ proc testWakuNode(): WakuNode = extIp = parseIpAddress("127.0.0.1") port = Port(0) - return newTestWakuNode(privkey, bindIp, port, some(extIp), some(port)) + return newTestWakuNode(privkey, bindIp, port, Opt.some(extIp), Opt.some(port)) type RestLightPushTest = object serviceNode: WakuNode @@ -112,7 +112,7 @@ suite "Waku v2 Rest API - lightpush": check message.proof.isSome() let requestBody = - PushRequest(pubsubTopic: some(DefaultPubsubTopic), message: message) + PushRequest(pubsubTopic: Opt.some(DefaultPubsubTopic), message: message) let response = await restLightPushTest.restClient.sendPushRequest(body = requestBody) @@ -122,8 +122,8 @@ suite "Waku v2 Rest API - lightpush": ## handling the proof message attribute within the REST request. check: response.status == 505 - response.data.statusDesc == some("No peers for topic, skipping publish") - response.data.relayPeerCount == none[uint32]() + response.data.statusDesc == Opt.some("No peers for topic, skipping publish") + response.data.relayPeerCount == Opt.none(uint32) asyncTest "Push message request": # Given @@ -153,7 +153,7 @@ suite "Waku v2 Rest API - lightpush": .toRelayWakuMessage() let requestBody = - PushRequest(pubsubTopic: some(DefaultPubsubTopic), message: message) + PushRequest(pubsubTopic: Opt.some(DefaultPubsubTopic), message: message) let response = await restLightPushTest.restClient.sendPushRequest(requestBody) echo "response", $response @@ -161,7 +161,7 @@ suite "Waku v2 Rest API - lightpush": # Then check: response.status == 200 - response.data.relayPeerCount == some(1.uint32) + response.data.relayPeerCount == Opt.some(1.uint32) await restLightPushTest.shutdown() @@ -186,15 +186,15 @@ suite "Waku v2 Rest API - lightpush": ) .toRelayWakuMessage() let badRequestBody1 = - PushRequest(pubsubTopic: some(DefaultPubsubTopic), message: badMessage1) + PushRequest(pubsubTopic: Opt.some(DefaultPubsubTopic), message: badMessage1) let badMessage2: RelayWakuMessage = fakeWakuMessage(contentTopic = "", payload = toBytes("Sthg")).toRelayWakuMessage() let badRequestBody2 = - PushRequest(pubsubTopic: some(DefaultPubsubTopic), message: badMessage2) + PushRequest(pubsubTopic: Opt.some(DefaultPubsubTopic), message: badMessage2) let badRequestBody3 = - PushRequest(pubsubTopic: none(PubsubTopic), message: badMessage2) + PushRequest(pubsubTopic: Opt.none(PubsubTopic), message: badMessage2) # var response: RestResponse[PushResponse] @@ -255,7 +255,7 @@ suite "Waku v2 Rest API - lightpush": .toRelayWakuMessage() let requestBody = - PushRequest(pubsubTopic: some(DefaultPubsubTopic), message: message) + PushRequest(pubsubTopic: Opt.some(DefaultPubsubTopic), message: message) let response = await restLightPushTest.restClient.sendPushRequest(requestBody) echo "response", $response @@ -263,7 +263,7 @@ suite "Waku v2 Rest API - lightpush": # Then check: response.status == 200 - response.data.relayPeerCount == some(1.uint32) + response.data.relayPeerCount == Opt.some(1.uint32) let pushRejectedProc = proc() {.async.} = let message: RelayWakuMessage = fakeWakuMessage( @@ -272,7 +272,7 @@ suite "Waku v2 Rest API - lightpush": .toRelayWakuMessage() let requestBody = - PushRequest(pubsubTopic: some(DefaultPubsubTopic), message: message) + PushRequest(pubsubTopic: Opt.some(DefaultPubsubTopic), message: message) let response = await restLightPushTest.restClient.sendPushRequest(requestBody) echo "response", $response diff --git a/tests/wakunode_rest/test_rest_lightpush_legacy.nim b/tests/wakunode_rest/test_rest_lightpush_legacy.nim index 5f29146c8..03679293f 100644 --- a/tests/wakunode_rest/test_rest_lightpush_legacy.nim +++ b/tests/wakunode_rest/test_rest_lightpush_legacy.nim @@ -1,4 +1,4 @@ -import std/options +import results {.used.} import @@ -35,7 +35,7 @@ proc testWakuNode(): WakuNode = extIp = parseIpAddress("127.0.0.1") port = Port(0) - return newTestWakuNode(privkey, bindIp, port, some(extIp), some(port)) + return newTestWakuNode(privkey, bindIp, port, Opt.some(extIp), Opt.some(port)) type RestLightPushTest = object serviceNode: WakuNode @@ -110,7 +110,7 @@ suite "Waku v2 Rest API - lightpush": check message.proof.isSome() let requestBody = - PushRequest(pubsubTopic: some(DefaultPubsubTopic), message: message) + PushRequest(pubsubTopic: Opt.some(DefaultPubsubTopic), message: message) let response = await restLightPushTest.client.sendPushRequest(body = requestBody) @@ -147,7 +147,7 @@ suite "Waku v2 Rest API - lightpush": .toRelayWakuMessage() let requestBody = - PushRequest(pubsubTopic: some(DefaultPubsubTopic), message: message) + PushRequest(pubsubTopic: Opt.some(DefaultPubsubTopic), message: message) let response = await restLightPushTest.client.sendPushRequest(requestBody) echo "response", $response @@ -180,15 +180,15 @@ suite "Waku v2 Rest API - lightpush": ) .toRelayWakuMessage() let badRequestBody1 = - PushRequest(pubsubTopic: some(DefaultPubsubTopic), message: badMessage1) + PushRequest(pubsubTopic: Opt.some(DefaultPubsubTopic), message: badMessage1) let badMessage2: RelayWakuMessage = fakeWakuMessage(contentTopic = "", payload = toBytes("Sthg")).toRelayWakuMessage() let badRequestBody2 = - PushRequest(pubsubTopic: some(DefaultPubsubTopic), message: badMessage2) + PushRequest(pubsubTopic: Opt.some(DefaultPubsubTopic), message: badMessage2) let badRequestBody3 = - PushRequest(pubsubTopic: none(PubsubTopic), message: badMessage2) + PushRequest(pubsubTopic: Opt.none(PubsubTopic), message: badMessage2) var response: RestResponse[string] @@ -252,7 +252,7 @@ suite "Waku v2 Rest API - lightpush": .toRelayWakuMessage() let requestBody = - PushRequest(pubsubTopic: some(DefaultPubsubTopic), message: message) + PushRequest(pubsubTopic: Opt.some(DefaultPubsubTopic), message: message) let response = await restLightPushTest.client.sendPushRequest(requestBody) echo "response", $response @@ -269,7 +269,7 @@ suite "Waku v2 Rest API - lightpush": .toRelayWakuMessage() let requestBody = - PushRequest(pubsubTopic: some(DefaultPubsubTopic), message: message) + PushRequest(pubsubTopic: Opt.some(DefaultPubsubTopic), message: message) let response = await restLightPushTest.client.sendPushRequest(requestBody) echo "response", $response diff --git a/tests/wakunode_rest/test_rest_relay.nim b/tests/wakunode_rest/test_rest_relay.nim index b59dc463d..7368545ba 100644 --- a/tests/wakunode_rest/test_rest_relay.nim +++ b/tests/wakunode_rest/test_rest_relay.nim @@ -1,7 +1,8 @@ {.used.} import - std/[sequtils, strformat, strutils, tempfiles, osproc, options], + results, + std/[sequtils, strformat, strutils, tempfiles, osproc], stew/byteutils, testutils/unittests, presto, @@ -35,14 +36,14 @@ proc testWakuNode(): WakuNode = extIp = parseIpAddress("127.0.0.1") port = Port(0) - newTestWakuNode(privkey, bindIp, port, some(extIp), some(port)) + newTestWakuNode(privkey, bindIp, port, Opt.some(extIp), Opt.some(port)) suite "Waku v2 Rest API - Relay": var anvilProc {.threadVar.}: Process var manager {.threadVar.}: OnchainGroupManager setup: - anvilProc = runAnvil(stateFile = some(DEFAULT_ANVIL_STATE_PATH)) + anvilProc = runAnvil(stateFile = Opt.some(DEFAULT_ANVIL_STATE_PATH)) manager = waitFor setupOnchainGroupManager(deployContracts = false) teardown: @@ -308,8 +309,8 @@ suite "Waku v2 Rest API - Relay": DefaultPubsubTopic, RelayWakuMessage( payload: base64.encode("TEST-PAYLOAD"), - contentTopic: some(DefaultContentTopic), - timestamp: some(now()), + contentTopic: Opt.some(DefaultContentTopic), + timestamp: Opt.some(now()), ), ) @@ -576,8 +577,8 @@ suite "Waku v2 Rest API - Relay": let response = await client.relayPostAutoMessagesV1( RelayWakuMessage( payload: base64.encode("TEST-PAYLOAD"), - contentTopic: some(DefaultContentTopic), - timestamp: some(now()), + contentTopic: Opt.some(DefaultContentTopic), + timestamp: Opt.some(now()), ) ) @@ -636,8 +637,8 @@ suite "Waku v2 Rest API - Relay": let response = await client.relayPostAutoMessagesV1( RelayWakuMessage( payload: base64.encode("TEST-PAYLOAD"), - contentTopic: some(invalidContentTopic), - timestamp: some(int64(2022)), + contentTopic: Opt.some(invalidContentTopic), + timestamp: Opt.some(int64(2022)), ) ) @@ -707,8 +708,8 @@ suite "Waku v2 Rest API - Relay": RelayWakuMessage( payload: base64.encode(getByteSequence(DefaultMaxWakuMessageSize)), # Message will be bigger than the max size - contentTopic: some(DefaultContentTopic), - timestamp: some(int64(2022)), + contentTopic: Opt.some(DefaultContentTopic), + timestamp: Opt.some(int64(2022)), ), ) @@ -778,8 +779,8 @@ suite "Waku v2 Rest API - Relay": RelayWakuMessage( payload: base64.encode(getByteSequence(DefaultMaxWakuMessageSize)), # Message will be bigger than the max size - contentTopic: some(DefaultContentTopic), - timestamp: some(int64(2022)), + contentTopic: Opt.some(DefaultContentTopic), + timestamp: Opt.some(int64(2022)), ) ) @@ -851,8 +852,8 @@ suite "Waku v2 Rest API - Relay": DefaultPubsubTopic, RelayWakuMessage( payload: base64.encode("TEST-PAYLOAD"), - contentTopic: some(DefaultContentTopic), - timestamp: some(now()), + contentTopic: Opt.some(DefaultContentTopic), + timestamp: Opt.some(now()), ), ) @@ -872,8 +873,8 @@ suite "Waku v2 Rest API - Relay": DefaultPubsubTopic, RelayWakuMessage( payload: base64.encode("TEST-PAYLOAD"), - contentTopic: some(DefaultContentTopic), - timestamp: some(now()), + contentTopic: Opt.some(DefaultContentTopic), + timestamp: Opt.some(now()), ), ) @@ -957,8 +958,8 @@ suite "Waku v2 Rest API - Relay": let response = await client.relayPostAutoMessagesV1( RelayWakuMessage( payload: base64.encode("TEST-PAYLOAD"), - contentTopic: some(DefaultContentTopic), - timestamp: some(now()), + contentTopic: Opt.some(DefaultContentTopic), + timestamp: Opt.some(now()), ) ) @@ -977,8 +978,8 @@ suite "Waku v2 Rest API - Relay": let retryResponse = await client.relayPostAutoMessagesV1( RelayWakuMessage( payload: base64.encode("TEST-PAYLOAD"), - contentTopic: some(DefaultContentTopic), - timestamp: some(now()), + contentTopic: Opt.some(DefaultContentTopic), + timestamp: Opt.some(now()), ) ) diff --git a/tests/wakunode_rest/test_rest_relay_serdes.nim b/tests/wakunode_rest/test_rest_relay_serdes.nim index ca0e45c30..e27ac444c 100644 --- a/tests/wakunode_rest/test_rest_relay_serdes.nim +++ b/tests/wakunode_rest/test_rest_relay_serdes.nim @@ -1,4 +1,3 @@ -import std/options {.used.} import results, stew/byteutils, unittest2, json_serialization @@ -34,10 +33,10 @@ suite "Waku v2 Rest API - Relay - serialization": let payload = base64.encode("MESSAGE") let data = RelayWakuMessage( payload: payload, - contentTopic: none(ContentTopic), - version: none(Natural), - timestamp: none(int64), - ephemeral: none(bool), + contentTopic: Opt.none(ContentTopic), + version: Opt.none(Natural), + timestamp: Opt.none(int64), + ephemeral: Opt.none(bool), ) # When diff --git a/tests/wakunode_rest/test_rest_store.nim b/tests/wakunode_rest/test_rest_store.nim index 0f4ed10ea..74847bf9b 100644 --- a/tests/wakunode_rest/test_rest_store.nim +++ b/tests/wakunode_rest/test_rest_store.nim @@ -1,7 +1,8 @@ {.used.} import - std/[options, sugar], + results, + std/sugar, chronicles, chronos/timer, testutils/unittests, @@ -51,7 +52,7 @@ proc testWakuNode(): WakuNode = extIp = parseIpAddress("127.0.0.1") port = Port(0) - return newTestWakuNode(privkey, bindIp, port, some(extIp), some(port)) + return newTestWakuNode(privkey, bindIp, port, Opt.some(extIp), Opt.some(port)) ################################################################################ # Beginning of the tests @@ -64,7 +65,7 @@ procSuite "Waku Rest API - Store v3": ) let messageHash = computeMessageHash(DefaultPubsubTopic, wakuMsg) - let restMsgHash = some(messageHash.toRestStringWakuMessageHash()) + let restMsgHash = Opt.some(messageHash.toRestStringWakuMessageHash()) let parsedMsgHashRes = parseHash(restMsgHash) assert parsedMsgHashRes.isOk(), $parsedMsgHashRes.error @@ -74,7 +75,7 @@ procSuite "Waku Rest API - Store v3": # Random validation. Obtained the raw values manually let expected = - some("0x9e0ea917677a3d2b8610b0126986d89824b6acf76008b5fb9aa8b99ac906c1a7") + Opt.some("0x9e0ea917677a3d2b8610b0126986d89824b6acf76008b5fb9aa8b99ac906c1a7") let msgHashRes = parseHash(expected) assert msgHashRes.isOk(), $msgHashRes.error @@ -98,7 +99,7 @@ procSuite "Waku Rest API - Store v3": # WakuStore setup let db: SqliteDatabase = - SqliteDatabase.new(string.none().get(":memory:")).expect("valid DB") + SqliteDatabase.new(Opt.none(string).get(":memory:")).expect("valid DB") let driver: ArchiveDriver = SqliteDriver.new(db).expect("valid driver") let mountArchiveRes = node.mountArchive(driver) assert mountArchiveRes.isOk(), mountArchiveRes.error @@ -282,7 +283,7 @@ procSuite "Waku Rest API - Store v3": var pages = newSeq[seq[WakuMessage]](2) - var reqHash = none(string) + var reqHash = Opt.none(string) for i in 0 ..< 2: let response = await client.getStoreMessagesV3( @@ -310,7 +311,7 @@ procSuite "Waku Rest API - Store v3": # populate the cursor for next page if response.data.paginationCursor.isSome(): - reqHash = some(response.data.paginationCursor.get()) + reqHash = Opt.some(response.data.paginationCursor.get()) check: response.status == 200 @@ -772,7 +773,7 @@ procSuite "Waku Rest API - Store v3": var pages = newSeq[seq[WakuMessage]](2) var reqPubsubTopic = DefaultPubsubTopic - var reqHash = none(string) + var reqHash = Opt.none(string) for i in 0 ..< 2: let response = await client.getStoreMessagesV3( diff --git a/tools/confutils/cli_args.nim b/tools/confutils/cli_args.nim index aa7b6cb1b..1774f1445 100644 --- a/tools/confutils/cli_args.nim +++ b/tools/confutils/cli_args.nim @@ -64,7 +64,7 @@ type WakuNodeConf* = object configFile* {. desc: "Loads configuration from a TOML file (cmd-line parameters take precedence)", name: "config-file" - .}: Option[InputFile] + .}: Opt[InputFile] ## Log configuration logLevel* {. @@ -119,23 +119,23 @@ type WakuNodeConf* = object name: "rln-relay-eth-private-key" .}: string - # Option-typed; desc states the default since the CLI can't auto-show it for none(). + # Opt-typed; desc states the default since the CLI can't auto-show it for Opt.none(). rlnRelayUserMessageLimit* {. desc: "Set a user message limit for the rln membership registration. Must be a positive integer. Default is " & $DefaultRlnRelayUserMessageLimit & ".", - defaultValue: none(uint64), + defaultValue: Opt.none(uint64), name: "rln-relay-user-message-limit" - .}: Option[uint64] + .}: Opt[uint64] - # Option-typed; desc states the default since the CLI can't auto-show it for none(). + # Opt-typed; desc states the default since the CLI can't auto-show it for Opt.none(). rlnEpochSizeSec* {. desc: "Epoch size in seconds used to rate limit RLN memberships. Default is " & $DefaultRlnRelayEpochSizeSec & " second.", - defaultValue: none(uint64), + defaultValue: Opt.none(uint64), name: "rln-relay-epoch-sec" - .}: Option[uint64] + .}: Opt[uint64] maxMessageSize* {. desc: @@ -168,15 +168,15 @@ type WakuNodeConf* = object name: "preset" .}: string - # Option-typed; desc states the default since the CLI can't auto-show it for none(). + # Opt-typed; desc states the default since the CLI can't auto-show it for Opt.none(). clusterId* {. desc: static( "Cluster id that the node is running in. Node in a different cluster id is disconnected. Default is " & $DefaultClusterId & "." ), - defaultValue: none(uint16), + defaultValue: Opt.none(uint16), name: "cluster-id" - .}: Option[uint16] + .}: Opt[uint16] agentString* {. defaultValue: DefaultAgentString, @@ -185,7 +185,7 @@ type WakuNodeConf* = object .}: string nodekey* {.desc: "P2P node private key as 64 char hex string.", name: "nodekey".}: - Option[PrivateKey] + Opt[PrivateKey] listenAddress* {. defaultValue: defaultListenAddress(), @@ -243,7 +243,7 @@ type WakuNodeConf* = object peerStoreCapacity* {. desc: "Maximum stored peers in the peerstore.", name: "peer-store-capacity" - .}: Option[int] + .}: Opt[int] peerPersistence* {. desc: "Enable peer persistence.", defaultValue: false, name: "peer-persistence" @@ -295,25 +295,25 @@ hence would have reachability issues.""", name: "relay-shard-manager" .}: bool - # Option-typed; desc states the default since the CLI can't auto-show it for none(). + # Opt-typed; desc states the default since the CLI can't auto-show it for Opt.none(). rlnRelay* {. desc: "Enable spam protection through rln-relay: true|false. Default is " & $DefaultRlnRelayEnabled & ".", - defaultValue: none(bool), + defaultValue: Opt.none(bool), name: "rln-relay" - .}: Option[bool] + .}: Opt[bool] rlnRelayCredIndex* {. desc: "the index of the onchain commitment to use", name: "rln-relay-membership-index" - .}: Option[uint] + .}: Opt[uint] rlnRelayDynamic* {. desc: "Enable waku-rln-relay with on-chain dynamic group management: true|false.", - defaultValue: none(bool), + defaultValue: Opt.none(bool), name: "rln-relay-dynamic" - .}: Option[bool] + .}: Opt[bool] entryNodes* {. desc: @@ -557,9 +557,10 @@ hence would have reachability issues.""", ## Discovery v5 config discv5Discovery* {. desc: "Enable discovering nodes via Node Discovery v5. Default is true.", - defaultValue: some(true), + defaultValue: Opt.some(true), + defaultValueDesc: "true", name: "discv5-discovery" - .}: Option[bool] + .}: Opt[bool] discv5UdpPort* {. desc: "Listening UDP port for Node Discovery v5.", @@ -625,18 +626,18 @@ hence would have reachability issues.""", .}: bool #Mix config - # Option-typed; desc states the default since the CLI can't auto-show it for none(). + # Opt-typed; desc states the default since the CLI can't auto-show it for Opt.none(). mix* {. desc: "Enable mix protocol: true|false. Default is " & $DefaultMix & ".", - defaultValue: none(bool), + defaultValue: Opt.none(bool), name: "mix" - .}: Option[bool] + .}: Opt[bool] mixkey* {. desc: "ED25519 private key as 64 char hex string , without 0x. If not provided, a random key will be generated.", name: "mixkey" - .}: Option[string] + .}: Opt[string] mixnodes* {. desc: @@ -645,14 +646,14 @@ hence would have reachability issues.""", .}: seq[MixNodePubInfo] # Kademlia Discovery config - # Option-typed; desc states the default since the CLI can't auto-show it for none(). + # Opt-typed; desc states the default since the CLI can't auto-show it for Opt.none(). enableKadDiscovery* {. desc: "Enable extended kademlia discovery. Can be enabled without bootstrap nodes for the first node in the network. Default is " & $DefaultKadEnabled & ".", - defaultValue: none(bool), + defaultValue: Opt.none(bool), name: "enable-kad-discovery" - .}: Option[bool] + .}: Opt[bool] kadBootstrapNodes* {. desc: @@ -915,6 +916,12 @@ proc readValue*( except CatchableError: raise newException(SerializationError, getCurrentExceptionMsg()) +proc readValue*[T]( + r: var TomlReader, value: var Opt[T] +) {.gcsafe, raises: [SerializationError, IOError].} = + mixin readValue + value = Opt.some(r.readValue(T)) + proc load*(T: type WakuNodeConf, version = ""): ConfResult[T] = try: let conf = WakuNodeConf.load( @@ -953,8 +960,8 @@ proc toKeystoreGeneratorConf*(n: WakuNodeConf): RlnKeystoreGeneratorConf = ) proc toNetworkPresetConf*( - preset: string, clusterId: Option[uint16] -): ConfResult[Option[NetworkPresetConf]] = + preset: string, clusterId: Opt[uint16] +): ConfResult[Opt[NetworkPresetConf]] = var lcPreset = toLowerAscii(preset) if clusterId.isSome() and clusterId.get() == 1: warn( @@ -969,15 +976,15 @@ proc toNetworkPresetConf*( case lcPreset of "": - ok(none(NetworkPresetConf)) + ok(Opt.none(NetworkPresetConf)) of "twn": - ok(some(NetworkPresetConf.TheWakuNetworkConf())) + ok(Opt.some(NetworkPresetConf.TheWakuNetworkConf())) of "logos.dev", "logosdev": - ok(some(NetworkPresetConf.LogosDevConf())) + ok(Opt.some(NetworkPresetConf.LogosDevConf())) of "logos.test", "logostest": - ok(some(NetworkPresetConf.LogosTestConf())) + ok(Opt.some(NetworkPresetConf.LogosTestConf())) of "status.prod", "statusprod": - ok(some(NetworkPresetConf.StatusProdConf())) + ok(Opt.some(NetworkPresetConf.StatusProdConf())) else: err("Invalid --preset value passed: " & lcPreset) @@ -1093,7 +1100,7 @@ proc toWakuConf*(n: WakuNodeConf): ConfResult[WakuConf] = b.storeServiceConf.withMaxNumDbConnections(n.storeMaxNumDbConnections) b.storeServiceConf.withResume(n.storeResume) - # TODO: can we just use `Option` on the CLI? + # TODO: can we just use `Opt` on the CLI? if n.storenode != "": b.withRemoteStoreNode(n.storenode) if n.filternode != "": diff --git a/tools/confutils/conf_from_json.nim b/tools/confutils/conf_from_json.nim index 7e78fd300..e51a943b6 100644 --- a/tools/confutils/conf_from_json.nim +++ b/tools/confutils/conf_from_json.nim @@ -1,4 +1,4 @@ -import std/[json, macros, options, strutils, tables] +import std/[json, macros, strutils, tables] import confutils, confutils/defs, confutils/std/net, results # The shared JSON walker is `raises: []` so the messaging FFI parser (also @@ -121,19 +121,20 @@ proc applyJsonFieldsToConf*[T]( # JSON null leaves the field unset; it keeps its default. jsonFields.del(matchKey) else: - when confValue is Option: + when confValue is Opt: type Inner = typeof(confValue.get()) when Inner is seq: type Elem = typeof(confValue.get()[0]) when compiles(parseCmdArg(Elem, "")): - confValue = - some(?parseSeqInto[Elem](jsonValue, confField, jsonKey, parseErrPrefix)) + confValue = Opt.some( + ?parseSeqInto[Elem](jsonValue, confField, jsonKey, parseErrPrefix) + ) jsonFields.del(matchKey) else: return err("config option '" & jsonKey & "' cannot be set via JSON") else: when compiles(parseCmdArg(Inner, "")): - confValue = some( + confValue = Opt.some( ?parseScalarInto[Inner](jsonValue, confField, jsonKey, parseErrPrefix) ) jsonFields.del(matchKey) diff --git a/tools/confutils/envvar_serialization/reader.nim b/tools/confutils/envvar_serialization/reader.nim index ef0f47ac1..72ff8faa8 100644 --- a/tools/confutils/envvar_serialization/reader.nim +++ b/tools/confutils/envvar_serialization/reader.nim @@ -1,7 +1,8 @@ {.push raises: [].} import - std/[tables, typetraits, options, os], + results, + std/[options, tables, typetraits, os], serialization/object_serialization, serialization/errors import ./utils @@ -49,6 +50,22 @@ proc readValue*[T](r: var EnvvarReader, value: var T) {.raises: [SerializationEr SerializationError, "Couldn't getValue SomePrimitives: " & getCurrentExceptionMsg(), ) + elif T is Opt: + template getUnderlyingType[T](_: Opt[T]): untyped = + T + + let key = constructKey(r.prefix, r.key) + if os.existsEnv(key): + type uType = getUnderlyingType(value) + when uType is string: + value = Opt.some(os.getEnv(key)) + else: + try: + value = Opt.some(r.readValue(uType)) + except ValueError, IOError: + raise newException( + SerializationError, "Couldn't read Opt value: " & getCurrentExceptionMsg() + ) elif T is Option: template getUnderlyingType[T](_: Option[T]): untyped = T @@ -57,10 +74,10 @@ proc readValue*[T](r: var EnvvarReader, value: var T) {.raises: [SerializationEr if os.existsEnv(key): type uType = getUnderlyingType(value) when uType is string: - value = some(os.getEnv(key)) + value = options.some(os.getEnv(key)) else: try: - value = some(r.readValue(uType)) + value = options.some(r.readValue(uType)) except ValueError, IOError: raise newException( SerializationError, diff --git a/tools/confutils/envvar_serialization/writer.nim b/tools/confutils/envvar_serialization/writer.nim index c497b5496..de4c135c8 100644 --- a/tools/confutils/envvar_serialization/writer.nim +++ b/tools/confutils/envvar_serialization/writer.nim @@ -1,4 +1,4 @@ -import typetraits, options, tables, os, serialization, ./utils +import results, std/options, typetraits, tables, os, serialization, ./utils type EnvvarWriter* = object prefix: string @@ -17,6 +17,9 @@ proc writeValue*(w: var EnvvarWriter, value: auto) = elif value is (SomePrimitives or range): let key = constructKey(w.prefix, w.key) setValue(key, value) + elif value is Opt: + if value.isSome: + w.writeValue value.get elif value is Option: if value.isSome: w.writeValue value.get diff --git a/tools/rln_keystore_generator/rln_keystore_generator.nim b/tools/rln_keystore_generator/rln_keystore_generator.nim index 9643f039f..22d7a35de 100644 --- a/tools/rln_keystore_generator/rln_keystore_generator.nim +++ b/tools/rln_keystore_generator/rln_keystore_generator.nim @@ -52,9 +52,9 @@ proc doRlnKeystoreGenerator*(conf: RlnKeystoreGeneratorConf) = ethClientUrls: conf.ethClientUrls, chainId: conf.chainId, ethContractAddress: conf.ethContractAddress, - keystorePath: none(string), - keystorePassword: none(string), - ethPrivateKey: some(conf.ethPrivateKey), + keystorePath: Opt.none(string), + keystorePassword: Opt.none(string), + ethPrivateKey: Opt.some(conf.ethPrivateKey), onFatalErrorAction: onFatalErrorAction, ) try: