84 lines
2.1 KiB
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))
|