syndicate_actor_tox/src/protocol.nim

66 lines
1.6 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]
Typing* {.preservesRecord: "typing".} = object
BootstrapNode* {.preservesRecord: "bootstrap".} = object
`publicKey`*: string
`host`*: string
`port`*: int
StatusMessage* {.preservesRecord: "status-message".} = object
`msg`*: string
Status* {.preservesRecord: "status".} = object
`status`*: Connection
FriendAccept* {.preservesRecord: "accept".} = object
`key`*: seq[byte]
`Connection`* {.preservesOr, pure.} = enum
`none`, `tcp`, `udp`
CoreVersion* {.preservesRecord: "core".} = object
`major`*: int
`minor`*: int
`patch`*: int
proc `$`*[E](x: FriendDataspace[E] | ToxDataspace[E]): string =
`$`(toPreserve(x, E))
proc encode*[E](x: FriendDataspace[E] | ToxDataspace[E]): seq[byte] =
encode(toPreserve(x, E))
proc `$`*(x: Name | FriendRequest | Address | Typing | BootstrapNode |
StatusMessage |
Status |
FriendAccept |
CoreVersion): string =
`$`(toPreserve(x))
proc encode*(x: Name | FriendRequest | Address | Typing | BootstrapNode |
StatusMessage |
Status |
FriendAccept |
CoreVersion): seq[byte] =
encode(toPreserve(x))