aboutsummaryrefslogtreecommitdiff
path: root/examples/simple/simple_pb.nim
blob: a2b1db30657ef71f91a5cee026f6b4954b90daef (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
# Generated by protoc_gen_nim. Do not edit!

import intsets

import nimpb/nimpb

type
    Test1_MyEnum* {.pure.} = enum
        Foo = 0
        Bar = 1
    Test1* = ref Test1Obj
    Test1Obj* = object of RootObj
        hasField: IntSet
        a: int32
        e: Test1_MyEnum

proc readTest1_MyEnum*(stream: ProtobufStream): Test1_MyEnum =
    Test1_MyEnum(readUInt32(stream))

proc writeTest1_MyEnum*(stream: ProtobufStream, value: Test1_MyEnum) =
    writeUInt32(stream, uint32(value))

proc writeTest1_MyEnum*(stream: ProtobufStream, value: Test1_MyEnum, fieldNumber: int) =
    writeUInt32(stream, uint32(value), fieldNumber)

proc sizeOfTest1_MyEnum*(value: Test1_MyEnum): uint64 =
    sizeOfUInt32(uint32(value))

proc newTest1*(): Test1
proc writeTest1*(stream: ProtobufStream, message: Test1)
proc readTest1*(stream: ProtobufStream): Test1
proc sizeOfTest1*(message: Test1): uint64

proc newTest1*(): Test1 =
    new(result)
    result.hasField = initIntSet()
    result.a = 0
    result.e = Test1_MyEnum(0)

proc cleara*(message: Test1) =
    message.a = 0
    excl(message.hasField, [1])

proc hasa*(message: Test1): bool =
    result = contains(message.hasField, 1)

proc seta*(message: Test1, value: int32) =
    message.a = value
    incl(message.hasField, 1)

proc a*(message: Test1): int32 {.inline.} =
    message.a

proc `a=`*(message: Test1, value: int32) {.inline.} =
    seta(message, value)

proc cleare*(message: Test1) =
    message.e = Test1_MyEnum(0)
    excl(message.hasField, [2])

proc hase*(message: Test1): bool =
    result = contains(message.hasField, 2)

proc sete*(message: Test1, value: Test1_MyEnum) =
    message.e = value
    incl(message.hasField, 2)

proc e*(message: Test1): Test1_MyEnum {.inline.} =
    message.e

proc `e=`*(message: Test1, value: Test1_MyEnum) {.inline.} =
    sete(message, value)

proc sizeOfTest1*(message: Test1): uint64 =
    if hasa(message):
        result = result + sizeOfTag(1, WireType.Varint)
        result = result + sizeOfInt32(message.a)
    if hase(message):
        result = result + sizeOfTag(2, WireType.Varint)
        result = result + sizeOfTest1_MyEnum(message.e)

proc writeTest1*(stream: ProtobufStream, message: Test1) =
    if hasa(message):
        writeInt32(stream, message.a, 1)
    if hase(message):
        writeTest1_MyEnum(stream, message.e, 2)

proc readTest1*(stream: ProtobufStream): Test1 =
    result = newTest1()
    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.Varint)
            seta(result, readInt32(stream))
        of 2:
            expectWireType(wireType, WireType.Varint)
            sete(result, readTest1_MyEnum(stream))
        else: skipField(stream, wireType)

proc serialize*(message: Test1): string =
    let
        ss = newStringStream()
        pbs = newProtobufStream(ss)
    writeTest1(pbs, message)
    result = ss.data

proc newTest1*(data: string): Test1 =
    let
        ss = newStringStream(data)
        pbs = newProtobufStream(ss)
    result = readTest1(pbs)