2021-10-06 09:30:38 +00:00
|
|
|
|
|
|
|
import
|
|
|
|
std/typetraits, preserves
|
|
|
|
|
|
|
|
type
|
2022-07-08 12:49:24 +00:00
|
|
|
UserId* = BiggestInt
|
2021-09-24 19:25:47 +00:00
|
|
|
NickConflict* {.preservesRecord: "nickConflict".} = object
|
|
|
|
|
|
|
|
NickClaimResponseKind* {.pure.} = enum
|
|
|
|
`true`, `NickConflict`
|
|
|
|
`NickClaimResponse`* {.preservesOr.} = object
|
|
|
|
case orKind*: NickClaimResponseKind
|
|
|
|
of NickClaimResponseKind.`true`:
|
|
|
|
`true`* {.preservesLiteral: "#t".}: bool
|
|
|
|
|
|
|
|
of NickClaimResponseKind.`NickConflict`:
|
|
|
|
`nickconflict`*: NickConflict
|
|
|
|
|
|
|
|
|
2022-12-08 08:15:01 +00:00
|
|
|
Join*[Cap] {.preservesRecord: "joinedUser".} = object
|
2021-10-06 09:30:38 +00:00
|
|
|
`uid`*: UserId
|
2022-12-08 08:15:01 +00:00
|
|
|
`handle`*: Cap
|
2021-10-06 09:30:38 +00:00
|
|
|
|
|
|
|
SessionKind* {.pure.} = enum
|
2021-09-24 19:25:47 +00:00
|
|
|
`observeUsers`, `observeSpeech`, `NickClaim`, `Says`
|
2022-12-08 08:15:01 +00:00
|
|
|
SessionObserveUsers*[Cap] {.preservesRecord: "Observe".} = object
|
2021-09-24 19:25:47 +00:00
|
|
|
`data`* {.preservesLiteral: "user".}: bool
|
2022-12-08 08:15:01 +00:00
|
|
|
`observer`*: Cap
|
2021-10-06 09:30:38 +00:00
|
|
|
|
2022-12-08 08:15:01 +00:00
|
|
|
SessionObserveSpeech*[Cap] {.preservesRecord: "Observe".} = object
|
2021-09-24 19:25:47 +00:00
|
|
|
`data`* {.preservesLiteral: "says".}: bool
|
2022-12-08 08:15:01 +00:00
|
|
|
`observer`*: Cap
|
2021-10-06 09:30:38 +00:00
|
|
|
|
2022-12-08 08:15:01 +00:00
|
|
|
`Session`*[Cap] {.preservesOr.} = object
|
2021-09-24 19:25:47 +00:00
|
|
|
case orKind*: SessionKind
|
|
|
|
of SessionKind.`observeUsers`:
|
2022-12-08 08:15:01 +00:00
|
|
|
`observeusers`*: SessionObserveUsers[Cap]
|
2021-10-06 09:30:38 +00:00
|
|
|
|
2021-09-24 19:25:47 +00:00
|
|
|
of SessionKind.`observeSpeech`:
|
2022-12-08 08:15:01 +00:00
|
|
|
`observespeech`*: SessionObserveSpeech[Cap]
|
2021-10-06 09:30:38 +00:00
|
|
|
|
2021-09-24 19:25:47 +00:00
|
|
|
of SessionKind.`NickClaim`:
|
2022-12-08 08:15:01 +00:00
|
|
|
`nickclaim`*: NickClaim[Cap]
|
2021-10-06 09:30:38 +00:00
|
|
|
|
|
|
|
of SessionKind.`Says`:
|
|
|
|
`says`*: Says
|
|
|
|
|
|
|
|
|
2021-09-24 19:25:47 +00:00
|
|
|
UserInfo* {.preservesRecord: "user".} = object
|
2021-10-06 09:30:38 +00:00
|
|
|
`uid`*: UserId
|
|
|
|
`name`*: string
|
|
|
|
|
2022-12-08 08:15:01 +00:00
|
|
|
NickClaim*[Cap] {.preservesRecord: "claimNick".} = object
|
2021-10-06 09:30:38 +00:00
|
|
|
`uid`*: UserId
|
|
|
|
`name`*: string
|
2022-12-08 08:15:01 +00:00
|
|
|
`k`*: Cap
|
2021-10-06 09:30:38 +00:00
|
|
|
|
2021-09-24 19:25:47 +00:00
|
|
|
Says* {.preservesRecord: "says".} = object
|
2021-10-06 09:30:38 +00:00
|
|
|
`who`*: UserId
|
|
|
|
`what`*: string
|
|
|
|
|
2022-12-08 08:15:01 +00:00
|
|
|
proc `$`*[Cap](x: Join[Cap] | Session[Cap] | NickClaim[Cap]): string =
|
|
|
|
`$`(toPreserve(x, Cap))
|
2021-10-06 09:30:38 +00:00
|
|
|
|
2022-12-08 08:15:01 +00:00
|
|
|
proc encode*[Cap](x: Join[Cap] | Session[Cap] | NickClaim[Cap]): seq[byte] =
|
|
|
|
encode(toPreserve(x, Cap))
|
2021-09-24 19:25:47 +00:00
|
|
|
|
|
|
|
proc `$`*(x: UserId | NickConflict | NickClaimResponse | UserInfo | Says): string =
|
|
|
|
`$`(toPreserve(x))
|
|
|
|
|
|
|
|
proc encode*(x: UserId | NickConflict | NickClaimResponse | UserInfo | Says): seq[
|
|
|
|
byte] =
|
|
|
|
encode(toPreserve(x))
|