aboutsummaryrefslogtreecommitdiff
path: root/examples/addressbook/phonenumber_pb.nim
blob: 6d331d3a623baf2bbf6c1316fdf28192912bb6e2 (plain)
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
115
116
117
118
119
# Generated by protoc_gen_nim. Do not edit!

import intsets

import protobuf/protobuf

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 writePhoneType*(stream: ProtobufStream, value: PhoneType, fieldNumber: int) =
    writeUInt32(stream, uint32(value), fieldNumber)

proc sizeOfPhoneType*(value: PhoneType): uint64 =
    sizeOfUInt32(uint32(value))

proc newPhoneNumber*(): PhoneNumber
proc writePhoneNumber*(stream: ProtobufStream, message: PhoneNumber)
proc readPhoneNumber*(stream: ProtobufStream): PhoneNumber
proc sizeOfPhoneNumber*(message: PhoneNumber): uint64

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):
        result = result + sizeOfTag(1, WireType.LengthDelimited)
        result = result + sizeOfString(message.number)
    if hasftype(message):
        result = result + sizeOfTag(2, WireType.Varint)
        result = result + sizeOfPhoneType(message.ftype)

proc writePhoneNumber*(stream: ProtobufStream, message: PhoneNumber) =
    if hasnumber(message):
        writeString(stream, message.number, 1)
    if hasftype(message):
        writePhoneType(stream, message.ftype, 2)

proc readPhoneNumber*(stream: ProtobufStream): PhoneNumber =
    result = newPhoneNumber()
    while not atEnd(stream):
        let
            tag = readTag(stream)
            wireType = getTagWireType(tag)
        case getTagFieldNumber(tag)
        of 0:
            raise newException(InvalidFieldNumberError, "Invalid field number: 0")
        of 1:
            expectWireType(wireType, WireType.LengthDelimited)
            setnumber(result, readString(stream))
        of 2:
            expectWireType(wireType, WireType.Varint)
            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)