Skip to content

Commit

Permalink
adding serialization and desarialization to FilterTopic and FilterSub…
Browse files Browse the repository at this point in the history
…scription
  • Loading branch information
gabrielmer committed Jan 8, 2024
1 parent 80bfd23 commit e37a9dd
Showing 1 changed file with 74 additions and 0 deletions.
74 changes: 74 additions & 0 deletions waku/waku_api/rest/admin/types.nim
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,20 @@ proc writeValue*(writer: var JsonWriter[RestJson], value: WakuPeer)
writer.writeField("protocols", value.protocols)
writer.endRecord()

proc writeValue*(writer: var JsonWriter[RestJson], value: FilterTopic)
{.raises: [IOError].} =
writer.beginRecord()
writer.writeField("pubsubTopic", value.pubsubTopic)
writer.writeField("contentTopic", value.contentTopic)
writer.endRecord()

proc writeValue*(writer: var JsonWriter[RestJson], value: FilterSubscription)
{.raises: [IOError].} =
writer.beginRecord()
writer.writeField("peerId", value.peerId)
writer.writeField("filterCriteria", value.filterCriteria)
writer.endRecord()

proc readValue*(reader: var JsonReader[RestJson], value: var ProtocolState)
{.gcsafe, raises: [SerializationError, IOError].} =
var
Expand Down Expand Up @@ -111,6 +125,66 @@ proc readValue*(reader: var JsonReader[RestJson], value: var WakuPeer)
protocols: protocols.get()
)

proc readValue*(reader: var JsonReader[RestJson], value: var FilterTopic)
{.gcsafe, raises: [SerializationError, IOError].} =
var
pubsubTopic: Option[string]
contentTopic: Option[string]

for fieldName in readObjectFields(reader):
case fieldName
of "pubsubTopic":
if pubsubTopic.isSome():
reader.raiseUnexpectedField("Multiple `pubsubTopic` fields found", "FilterTopic")
pubsubTopic = some(reader.readValue(string))
of "contentTopic":
if contentTopic.isSome():
reader.raiseUnexpectedField("Multiple `contentTopic` fields found", "FilterTopic")
contentTopic = some(reader.readValue(string))
else:
unrecognizedFieldWarning()

if pubsubTopic.isNone():
reader.raiseUnexpectedValue("Field `pubsubTopic` is missing")

if contentTopic.isNone():
reader.raiseUnexpectedValue("Field `contentTopic` are missing")

value = FilterTopic(
pubsubTopic: pubsubTopic.get(),
contentTopic: contentTopic.get()
)

proc readValue*(reader: var JsonReader[RestJson], value: var FilterSubscription)
{.gcsafe, raises: [SerializationError, IOError].} =
var
peerId: Option[string]
filterCriteria: Option[seq[FilterTopic]]

for fieldName in readObjectFields(reader):
case fieldName
of "peerId":
if peerId.isSome():
reader.raiseUnexpectedField("Multiple `peerId` fields found", "FilterSubscription")
peerId = some(reader.readValue(string))
of "filterCriteria":
if filterCriteria.isSome():
reader.raiseUnexpectedField("Multiple `filterCriteria` fields found", "FilterSubscription")
filterCriteria = some(reader.readValue(seq[FilterTopic]))
else:
unrecognizedFieldWarning()

if peerId.isNone():
reader.raiseUnexpectedValue("Field `peerId` is missing")

if filterCriteria.isNone():
reader.raiseUnexpectedValue("Field `filterCriteria` are missing")

value = FilterSubscription(
peerId: peerId.get(),
filterCriteria: filterCriteria.get()
)

## Utility for populating WakuPeers and ProtocolState
func `==`*(a, b: ProtocolState): bool {.inline.} =
return a.protocol == b.protocol
Expand Down

0 comments on commit e37a9dd

Please sign in to comment.