syndicate-nim/src/syndicate/protocols/secureChatProtocol.nim

74 lines
2.0 KiB
Nim
Raw Normal View History

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
`uid`*: UserId
2022-12-08 08:15:01 +00:00
`handle`*: Cap
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
2023-05-06 19:22:21 +00:00
`field0`* {.preservesLiteral: "user".}: tuple[]
2022-12-08 08:15:01 +00:00
`observer`*: Cap
2022-12-08 08:15:01 +00:00
SessionObserveSpeech*[Cap] {.preservesRecord: "Observe".} = object
2023-05-06 19:22:21 +00:00
`field0`* {.preservesLiteral: "says".}: tuple[]
2022-12-08 08:15:01 +00:00
`observer`*: Cap
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-09-24 19:25:47 +00:00
of SessionKind.`observeSpeech`:
2022-12-08 08:15:01 +00:00
`observespeech`*: SessionObserveSpeech[Cap]
2021-09-24 19:25:47 +00:00
of SessionKind.`NickClaim`:
2022-12-08 08:15:01 +00:00
`nickclaim`*: NickClaim[Cap]
of SessionKind.`Says`:
`says`*: Says
2021-09-24 19:25:47 +00:00
UserInfo* {.preservesRecord: "user".} = object
`uid`*: UserId
`name`*: string
2022-12-08 08:15:01 +00:00
NickClaim*[Cap] {.preservesRecord: "claimNick".} = object
`uid`*: UserId
`name`*: string
2022-12-08 08:15:01 +00:00
`k`*: Cap
2021-09-24 19:25:47 +00:00
Says* {.preservesRecord: "says".} = object
`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))
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))