diff --git a/vendor/nim-chronos b/vendor/nim-chronos index e38ceb537..41f77d261 160000 --- a/vendor/nim-chronos +++ b/vendor/nim-chronos @@ -1 +1 @@ -Subproject commit e38ceb5378e7ce945eedbe1c6fb670095cfb9cc5 +Subproject commit 41f77d261ead2508acdd3bd3f88a5cbbcefff05f diff --git a/vendor/nim-eth b/vendor/nim-eth index e5c2b1784..5aaeb67eb 160000 --- a/vendor/nim-eth +++ b/vendor/nim-eth @@ -1 +1 @@ -Subproject commit e5c2b1784ec7badc6162325e37daee2229f53d8b +Subproject commit 5aaeb67ebedbefaae2f719f245a96c1a80c42f81 diff --git a/vendor/nim-json-rpc b/vendor/nim-json-rpc index 60c4c9b5f..33360528d 160000 --- a/vendor/nim-json-rpc +++ b/vendor/nim-json-rpc @@ -1 +1 @@ -Subproject commit 60c4c9b5f28b530d5d89fd14c337af1d86390a82 +Subproject commit 33360528d208aaa70a6ed914619fe76321760d54 diff --git a/vendor/nim-json-serialization b/vendor/nim-json-serialization index 230e226da..3f1ce24ee 160000 --- a/vendor/nim-json-serialization +++ b/vendor/nim-json-serialization @@ -1 +1 @@ -Subproject commit 230e226da06605f9d8b8bdb1ba178c4b30511aca +Subproject commit 3f1ce24ee116daedbc9c8be525e63ec03e185a28 diff --git a/vendor/nim-libp2p b/vendor/nim-libp2p index 3011ba432..e3c967ad1 160000 --- a/vendor/nim-libp2p +++ b/vendor/nim-libp2p @@ -1 +1 @@ -Subproject commit 3011ba4326fa55220a758838835797ff322619fc +Subproject commit e3c967ad1939fb33b8e13759037d193734acd202 diff --git a/vendor/nim-metrics b/vendor/nim-metrics index 6142e433f..51f1227d0 160000 --- a/vendor/nim-metrics +++ b/vendor/nim-metrics @@ -1 +1 @@ -Subproject commit 6142e433fc8ea9b73379770a788017ac528d46ff +Subproject commit 51f1227d0fd04ce84b1ef784b11280cb7875348c diff --git a/vendor/nim-serialization b/vendor/nim-serialization index 543b2f3dd..4d541ec43 160000 --- a/vendor/nim-serialization +++ b/vendor/nim-serialization @@ -1 +1 @@ -Subproject commit 543b2f3dd0724f7cf631feba6c2a3ec438f3d230 +Subproject commit 4d541ec43454809904fc4c3c0a7436410ad597d2 diff --git a/waku/waku_api/rest/debug/types.nim b/waku/waku_api/rest/debug/types.nim index 102cbfc15..76ea1b9fc 100644 --- a/waku/waku_api/rest/debug/types.nim +++ b/waku/waku_api/rest/debug/types.nim @@ -34,8 +34,8 @@ proc writeValue*(writer: var JsonWriter[RestJson], value: DebugWakuInfo) {.raises: [IOError].} = writer.beginRecord() writer.writeField("listenAddresses", value.listenAddresses) - if value.enrUri.isSome: - writer.writeField("enrUri", value.enrUri) + if value.enrUri.isSome(): + writer.writeField("enrUri", value.enrUri.get()) writer.endRecord() proc readValue*(reader: var JsonReader[RestJson], value: var DebugWakuInfo) diff --git a/waku/waku_api/rest/filter/types.nim b/waku/waku_api/rest/filter/types.nim index a7a4fa585..6930a2312 100644 --- a/waku/waku_api/rest/filter/types.nim +++ b/waku/waku_api/rest/filter/types.nim @@ -72,32 +72,62 @@ proc toWakuMessage*(msg: FilterWakuMessage, version = 0): Result[WakuMessage, st #### Serialization and deserialization -proc writeValue*(writer: var JsonWriter[RestJson], value: Base64String) - {.raises: [IOError].} = - writer.writeValue(string(value)) - proc writeValue*(writer: var JsonWriter[RestJson], value: FilterWakuMessage) {.raises: [IOError].} = writer.beginRecord() writer.writeField("payload", value.payload) - if value.contentTopic.isSome: - writer.writeField("contentTopic", value.contentTopic) - if value.version.isSome: - writer.writeField("version", value.version) - if value.timestamp.isSome: - writer.writeField("timestamp", value.timestamp) + if value.contentTopic.isSome(): + writer.writeField("contentTopic", value.contentTopic.get()) + if value.version.isSome(): + writer.writeField("version", value.version.get()) + if value.timestamp.isSome(): + writer.writeField("timestamp", value.timestamp.get()) writer.endRecord() -proc writeValue*(writer: var JsonWriter[RestJson], value: FilterLegacySubscribeRequest) +proc writeValue*(writer: var JsonWriter, value: FilterLegacySubscribeRequest) {.raises: [IOError].} = writer.beginRecord() writer.writeField("pubsubTopic", value.pubsubTopic) writer.writeField("contentFilters", value.contentFilters) writer.endRecord() -proc readValue*(reader: var JsonReader[RestJson], value: var Base64String) - {.raises: [SerializationError, IOError].} = - value = Base64String(reader.readValue(string)) +proc writeValue*(writer: var JsonWriter[RestJson], value: FilterSubscriptionResponse) + {.raises: [IOError].} = + writer.beginRecord() + writer.writeField("requestId", value.requestId) + writer.writeField("statusCode", value.statusCode) + writer.writeField("statusDesc", value.statusDesc) + writer.endRecord() + +proc writeValue*(writer: var JsonWriter[RestJson], value: FilterSubscribeRequest) + {.raises: [IOError].} = + writer.beginRecord() + writer.writeField("requestId", value.requestId) + if value.pubsubTopic.isSome(): + writer.writeField("pubsubTopic", value.pubsubTopic.get()) + writer.writeField("contentFilters", value.contentFilters) + writer.endRecord() + +proc writeValue*(writer: var JsonWriter[RestJson], value: FilterSubscriberPing) + {.raises: [IOError].} = + writer.beginRecord() + writer.writeField("requestId", value.requestId) + writer.endRecord() + +proc writeValue*(writer: var JsonWriter[RestJson], value: FilterUnsubscribeRequest) + {.raises: [IOError].} = + writer.beginRecord() + writer.writeField("requestId", value.requestId) + if value.pubsubTopic.isSome(): + writer.writeField("pubsubTopic", value.pubsubTopic.get()) + writer.writeField("contentFilters", value.contentFilters) + writer.endRecord() + +proc writeValue*(writer: var JsonWriter[RestJson], value: FilterUnsubscribeAllRequest) + {.raises: [IOError].} = + writer.beginRecord() + writer.writeField("requestId", value.requestId) + writer.endRecord() proc readValue*(reader: var JsonReader[RestJson], value: var FilterWakuMessage) {.raises: [SerializationError, IOError].} = diff --git a/waku/waku_api/rest/relay/types.nim b/waku/waku_api/rest/relay/types.nim index 126d94ac6..6dd440c9b 100644 --- a/waku/waku_api/rest/relay/types.nim +++ b/waku/waku_api/rest/relay/types.nim @@ -54,26 +54,18 @@ proc toWakuMessage*(msg: RelayWakuMessage, version = 0): Result[WakuMessage, str #### Serialization and deserialization -proc writeValue*(writer: var JsonWriter[RestJson], value: Base64String) - {.raises: [IOError].} = - writer.writeValue(string(value)) - proc writeValue*(writer: var JsonWriter[RestJson], value: RelayWakuMessage) {.raises: [IOError].} = writer.beginRecord() writer.writeField("payload", value.payload) - if value.contentTopic.isSome: - writer.writeField("contentTopic", value.contentTopic) - if value.version.isSome: - writer.writeField("version", value.version) - if value.timestamp.isSome: - writer.writeField("timestamp", value.timestamp) + if value.contentTopic.isSome(): + writer.writeField("contentTopic", value.contentTopic.get()) + if value.version.isSome(): + writer.writeField("version", value.version.get()) + if value.timestamp.isSome(): + writer.writeField("timestamp", value.timestamp.get()) writer.endRecord() -proc readValue*(reader: var JsonReader[RestJson], value: var Base64String) - {.raises: [SerializationError, IOError].} = - value = Base64String(reader.readValue(string)) - proc readValue*(reader: var JsonReader[RestJson], value: var RelayWakuMessage) {.raises: [SerializationError, IOError].} = var diff --git a/waku/waku_api/rest/serdes.nim b/waku/waku_api/rest/serdes.nim index 57541e60c..d68c89316 100644 --- a/waku/waku_api/rest/serdes.nim +++ b/waku/waku_api/rest/serdes.nim @@ -14,12 +14,16 @@ import json_serialization/std/net, json_serialization/std/sets, presto/common - +import + ../../common/base64 logScope: topics = "waku node rest" -Json.createFlavor RestJson +createJsonFlavor RestJson + +Json.setWriter JsonWriter, + PreferredOutput = string template unrecognizedFieldWarning* = # TODO: There should be a different notification mechanism for informing the @@ -31,6 +35,14 @@ template unrecognizedFieldWarning* = type SerdesResult*[T] = Result[T, cstring] +proc writeValue*(writer: var JsonWriter, value: Base64String) + {.gcsafe, raises: [IOError].} = + writer.writeValue(string(value)) + +proc readValue*(reader: var JsonReader, value: var Base64String) + {.gcsafe, raises: [SerializationError, IOError].} = + value = Base64String(reader.readValue(string)) + proc decodeFromJsonString*[T](t: typedesc[T], data: JsonString, requireAllFields = true): SerdesResult[T] = diff --git a/waku/waku_api/rest/store/types.nim b/waku/waku_api/rest/store/types.nim index 92da532a9..d2195acb5 100644 --- a/waku/waku_api/rest/store/types.nim +++ b/waku/waku_api/rest/store/types.nim @@ -50,6 +50,10 @@ type # field that contains error information errorMessage*: Option[string] +createJsonFlavor RestJson + +Json.setWriter JsonWriter, + PreferredOutput = string #### Type conversion @@ -127,40 +131,26 @@ proc toStoreResponseRest*(histResp: HistoryResponse): StoreResponseRest = cursor: cursor ) -## Beginning of Base64String serde - -proc writeValue*(writer: var JsonWriter[RestJson], - value: Base64String) - {.raises: [IOError].} = - writer.writeValue(string(value)) - -proc readValue*(reader: var JsonReader[RestJson], - value: var Base64String) - {.raises: [SerializationError, IOError].} = - value = Base64String(reader.readValue(string)) - -## End of Base64String serde - ## Beginning of StoreWakuMessage serde -proc writeValue*(writer: var JsonWriter[RestJson], +proc writeValue*(writer: var JsonWriter, value: StoreWakuMessage) - {.raises: [IOError].} = + {.gcsafe, raises: [IOError].} = writer.beginRecord() writer.writeField("payload", $value.payload) - if value.contentTopic.isSome: - writer.writeField("content_topic", value.contentTopic) - if value.version.isSome: - writer.writeField("version", value.version) - if value.timestamp.isSome: - writer.writeField("timestamp", value.timestamp) - if value.ephemeral.isSome: - writer.writeField("ephemeral", value.ephemeral) + if value.contentTopic.isSome(): + writer.writeField("content_topic", value.contentTopic.get()) + if value.version.isSome(): + writer.writeField("version", value.version.get()) + if value.timestamp.isSome(): + writer.writeField("timestamp", value.timestamp.get()) + if value.ephemeral.isSome(): + writer.writeField("ephemeral", value.ephemeral.get()) writer.endRecord() -proc readValue*(reader: var JsonReader[RestJson], +proc readValue*(reader: var JsonReader, value: var StoreWakuMessage) - {.raises: [SerializationError, IOError].} = + {.gcsafe, raises: [SerializationError, IOError].} = var payload = none(Base64String) contentTopic = none(ContentTopic) @@ -205,16 +195,16 @@ proc readValue*(reader: var JsonReader[RestJson], ## Beginning of MessageDigest serde -proc writeValue*(writer: var JsonWriter[RestJson], +proc writeValue*(writer: var JsonWriter, value: MessageDigest) - {.raises: [IOError].} = + {.gcsafe, raises: [IOError].} = writer.beginRecord() writer.writeField("data", base64.encode(value.data)) writer.endRecord() -proc readValue*(reader: var JsonReader[RestJson], +proc readValue*(reader: var JsonReader, value: var MessageDigest) - {.raises: [SerializationError, IOError].} = + {.gcsafe, raises: [SerializationError, IOError].} = var data = none(seq[byte]) @@ -240,9 +230,9 @@ proc readValue*(reader: var JsonReader[RestJson], ## Beginning of HistoryCursorRest serde -proc writeValue*(writer: var JsonWriter[RestJson], +proc writeValue*(writer: var JsonWriter, value: HistoryCursorRest) - {.raises: [IOError].} = + {.gcsafe, raises: [IOError].} = writer.beginRecord() writer.writeField("pubsub_topic", value.pubsubTopic) writer.writeField("sender_time", value.senderTime) @@ -250,9 +240,9 @@ proc writeValue*(writer: var JsonWriter[RestJson], writer.writeField("digest", value.digest) writer.endRecord() -proc readValue*(reader: var JsonReader[RestJson], +proc readValue*(reader: var JsonReader, value: var HistoryCursorRest) - {.raises: [SerializationError, IOError].} = + {.gcsafe, raises: [SerializationError, IOError].} = var pubsubTopic = none(PubsubTopic) senderTime = none(Timestamp) @@ -303,20 +293,20 @@ proc readValue*(reader: var JsonReader[RestJson], ## Beginning of StoreResponseRest serde -proc writeValue*(writer: var JsonWriter[RestJson], +proc writeValue*(writer: var JsonWriter, value: StoreResponseRest) - {.raises: [IOError].} = + {.gcsafe, raises: [IOError].} = writer.beginRecord() writer.writeField("messages", value.messages) - if value.cursor.isSome: - writer.writeField("cursor", value.cursor) - if value.errorMessage.isSome: - writer.writeField("error_message", value.errorMessage) + if value.cursor.isSome(): + writer.writeField("cursor", value.cursor.get()) + if value.errorMessage.isSome(): + writer.writeField("error_message", value.errorMessage.get()) writer.endRecord() -proc readValue*(reader: var JsonReader[RestJson], +proc readValue*(reader: var JsonReader, value: var StoreResponseRest) - {.raises: [SerializationError, IOError].} = + {.gcsafe, raises: [SerializationError, IOError].} = var messages = none(seq[StoreWakuMessage]) cursor = none(HistoryCursorRest) @@ -352,18 +342,18 @@ proc readValue*(reader: var JsonReader[RestJson], ## Beginning of StoreRequestRest serde -proc writeValue*(writer: var JsonWriter[RestJson], +proc writeValue*(writer: var JsonWriter, value: StoreRequestRest) - {.raises: [IOError].} = + {.gcsafe, raises: [IOError].} = writer.beginRecord() - if value.pubsubTopic.isSome: - writer.writeField("pubsub_topic", value.pubsubTopic) + if value.pubsubTopic.isSome(): + writer.writeField("pubsub_topic", value.pubsubTopic.get()) writer.writeField("content_topics", value.contentTopics) - if value.startTime.isSome: - writer.writeField("start_time", value.startTime) - if value.endTime.isSome: - writer.writeField("end_time", value.endTime) + if value.startTime.isSome(): + writer.writeField("start_time", value.startTime.get()) + if value.endTime.isSome(): + writer.writeField("end_time", value.endTime.get()) writer.writeField("page_size", value.pageSize) writer.writeField("ascending", value.ascending) writer.endRecord()