syndicate_actor_tox/src/protocol.nim

84 lines
2.1 KiB
Nim

import
std/typetraits, preserves
type
Name* {.preservesRecord: "name".} = object
`name`*: string
FriendRequest* {.preservesRecord: "request".} = object
`key`*: seq[byte]
`msg`*: string
FriendDataspace*[E] {.preservesRecord: "friend".} = ref object
`publicKey`*: seq[byte]
`entity`*: Preserve[E]
Address* {.preservesRecord: "address".} = object
`text`*: string
ToxDataspace*[E] {.preservesRecord: "tox".} = ref object
`publicKey`*: seq[byte]
`entity`*: Preserve[E]
FriendMessage* {.preservesRecord: "msg".} = object
`body`*: string
`kind`*: BiggestInt
Typing* {.preservesRecord: "typing".} = object
BootstrapNode* {.preservesRecord: "bootstrap".} = object
`publicKey`*: string
`host`*: string
`port`*: BiggestInt
StatusMessage* {.preservesRecord: "status-message".} = object
`msg`*: string
TransferDataspace*[E] {.preservesRecord: "transfer".} = ref object
`kind`*: BiggestInt
`size`*: BiggestInt
`filename`*: string
`entity`*: Preserve[E]
Status* {.preservesRecord: "status".} = object
`status`*: Connection
FriendAccept* {.preservesRecord: "accept".} = object
`key`*: seq[byte]
`Connection`* {.preservesOr, pure.} = enum
`none`, `tcp`, `udp`
TransferSink* {.preservesRecord: "sink".} = object
`path`*: string
CoreVersion* {.preservesRecord: "core".} = object
`major`*: BiggestInt
`minor`*: BiggestInt
`patch`*: BiggestInt
proc `$`*[E](x: FriendDataspace[E] | ToxDataspace[E] | TransferDataspace[E]): string =
`$`(toPreserve(x, E))
proc encode*[E](x: FriendDataspace[E] | ToxDataspace[E] | TransferDataspace[E]): seq[
byte] =
encode(toPreserve(x, E))
proc `$`*(x: Name | FriendRequest | Address | FriendMessage | Typing |
BootstrapNode |
StatusMessage |
Status |
FriendAccept |
TransferSink |
CoreVersion): string =
`$`(toPreserve(x))
proc encode*(x: Name | FriendRequest | Address | FriendMessage | Typing |
BootstrapNode |
StatusMessage |
Status |
FriendAccept |
TransferSink |
CoreVersion): seq[byte] =
encode(toPreserve(x))