1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
# Generated by protoc_gen_nim. Do not edit!
import intsets
import protobuf/stream
import protobuf/types
type
PhoneType* {.pure.} = enum
MOBILE = 0
HOME = 1
WORK = 2
PhoneNumber* = ref PhoneNumberObj
PhoneNumberObj* = object of RootObj
hasField: IntSet
number: string
ftype: PhoneType
proc readPhoneType*(stream: ProtobufStream): PhoneType =
PhoneType(readUInt32(stream))
proc writePhoneType*(stream: ProtobufStream, value: PhoneType) =
writeUInt32(stream, uint32(value))
proc sizeOfPhoneType*(value: PhoneType): uint64 =
sizeOfUInt32(uint32(value))
proc newPhoneNumber*(): PhoneNumber =
new(result)
result.hasField = initIntSet()
result.number = ""
result.ftype = PhoneType(0)
proc clearnumber*(message: PhoneNumber) =
message.number = ""
excl(message.hasField, 1)
proc hasnumber*(message: PhoneNumber): bool =
result = contains(message.hasField, 1)
proc setnumber*(message: PhoneNumber, value: string) =
message.number = value
incl(message.hasField, 1)
proc number*(message: PhoneNumber): string {.inline.} =
message.number
proc `number=`*(message: PhoneNumber, value: string) {.inline.} =
setnumber(message, value)
proc clearftype*(message: PhoneNumber) =
message.ftype = PhoneType(0)
excl(message.hasField, 2)
proc hasftype*(message: PhoneNumber): bool =
result = contains(message.hasField, 2)
proc setftype*(message: PhoneNumber, value: PhoneType) =
message.ftype = value
incl(message.hasField, 2)
proc ftype*(message: PhoneNumber): PhoneType {.inline.} =
message.ftype
proc `ftype=`*(message: PhoneNumber, value: PhoneType) {.inline.} =
setftype(message, value)
proc sizeOfPhoneNumber*(message: PhoneNumber): uint64 =
if hasnumber(message):
let
sizeOfField = sizeOfString(message.number)
sizeOfTag = sizeOfUInt32(uint32(makeTag(1, WireType.LengthDelimited)))
result = result + sizeOfField + sizeOfTag
if hasftype(message):
let
sizeOfField = sizeOfPhoneType(message.ftype)
sizeOfTag = sizeOfUInt32(uint32(makeTag(2, WireType.Varint)))
result = result + sizeOfField + sizeOfTag
proc writePhoneNumber*(stream: ProtobufStream, message: PhoneNumber) =
if hasnumber(message):
writeTag(stream, 1, WireType.LengthDelimited)
writeString(stream, message.number)
if hasftype(message):
writeTag(stream, 2, WireType.Varint)
writePhoneType(stream, message.ftype)
proc readPhoneNumber*(stream: ProtobufStream): PhoneNumber =
result = newPhoneNumber()
while not atEnd(stream):
let
tag = readTag(stream)
wireType = getTagWireType(tag)
case getTagFieldNumber(tag)
of 1:
setnumber(result, readString(stream))
of 2:
setftype(result, readPhoneType(stream))
else: skipField(stream, wireType)
proc serialize*(message: PhoneNumber): string =
let
ss = newStringStream()
pbs = newProtobufStream(ss)
writePhoneNumber(pbs, message)
result = ss.data
proc newPhoneNumber*(data: string): PhoneNumber =
let
ss = newStringStream(data)
pbs = newProtobufStream(ss)
result = readPhoneNumber(pbs)
|