blob: b6b7176c5656f87c39e7386282f2fb6bb6332a1b [file] [log] [blame]
Matthias Andreas Benkard832a54e2019-01-29 09:27:38 +01001// Protocol Buffers for Go with Gadgets
2//
3// Copyright (c) 2013, The GoGo Authors. All rights reserved.
4// http://github.com/gogo/protobuf
5//
6// Redistribution and use in source and binary forms, with or without
7// modification, are permitted provided that the following conditions are
8// met:
9//
10// * Redistributions of source code must retain the above copyright
11// notice, this list of conditions and the following disclaimer.
12// * Redistributions in binary form must reproduce the above
13// copyright notice, this list of conditions and the following disclaimer
14// in the documentation and/or other materials provided with the
15// distribution.
16//
17// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
29package proto
30
31import (
32 "fmt"
33 "os"
34 "reflect"
35)
36
37func (p *Properties) setCustomEncAndDec(typ reflect.Type) {
38 p.ctype = typ
39 if p.Repeated {
40 p.enc = (*Buffer).enc_custom_slice_bytes
41 p.dec = (*Buffer).dec_custom_slice_bytes
42 p.size = size_custom_slice_bytes
43 } else if typ.Kind() == reflect.Ptr {
44 p.enc = (*Buffer).enc_custom_bytes
45 p.dec = (*Buffer).dec_custom_bytes
46 p.size = size_custom_bytes
47 } else {
48 p.enc = (*Buffer).enc_custom_ref_bytes
49 p.dec = (*Buffer).dec_custom_ref_bytes
50 p.size = size_custom_ref_bytes
51 }
52}
53
54func (p *Properties) setDurationEncAndDec(typ reflect.Type) {
55 if p.Repeated {
56 if typ.Elem().Kind() == reflect.Ptr {
57 p.enc = (*Buffer).enc_slice_duration
58 p.dec = (*Buffer).dec_slice_duration
59 p.size = size_slice_duration
60 } else {
61 p.enc = (*Buffer).enc_slice_ref_duration
62 p.dec = (*Buffer).dec_slice_ref_duration
63 p.size = size_slice_ref_duration
64 }
65 } else if typ.Kind() == reflect.Ptr {
66 p.enc = (*Buffer).enc_duration
67 p.dec = (*Buffer).dec_duration
68 p.size = size_duration
69 } else {
70 p.enc = (*Buffer).enc_ref_duration
71 p.dec = (*Buffer).dec_ref_duration
72 p.size = size_ref_duration
73 }
74}
75
76func (p *Properties) setTimeEncAndDec(typ reflect.Type) {
77 if p.Repeated {
78 if typ.Elem().Kind() == reflect.Ptr {
79 p.enc = (*Buffer).enc_slice_time
80 p.dec = (*Buffer).dec_slice_time
81 p.size = size_slice_time
82 } else {
83 p.enc = (*Buffer).enc_slice_ref_time
84 p.dec = (*Buffer).dec_slice_ref_time
85 p.size = size_slice_ref_time
86 }
87 } else if typ.Kind() == reflect.Ptr {
88 p.enc = (*Buffer).enc_time
89 p.dec = (*Buffer).dec_time
90 p.size = size_time
91 } else {
92 p.enc = (*Buffer).enc_ref_time
93 p.dec = (*Buffer).dec_ref_time
94 p.size = size_ref_time
95 }
96
97}
98
99func (p *Properties) setSliceOfNonPointerStructs(typ reflect.Type) {
100 t2 := typ.Elem()
101 p.sstype = typ
102 p.stype = t2
103 p.isMarshaler = isMarshaler(t2)
104 p.isUnmarshaler = isUnmarshaler(t2)
105 p.enc = (*Buffer).enc_slice_ref_struct_message
106 p.dec = (*Buffer).dec_slice_ref_struct_message
107 p.size = size_slice_ref_struct_message
108 if p.Wire != "bytes" {
109 fmt.Fprintf(os.Stderr, "proto: no ptr oenc for %T -> %T \n", typ, t2)
110 }
111}