blob: 918e685e1d5796147927d0a10ba935d98b091c24 [file] [log] [blame]
khenaidood948f772021-08-11 17:49:24 -04001// Copyright 2018 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5// +build purego appengine
6
7package protoreflect
8
9import "google.golang.org/protobuf/internal/pragma"
10
11type valueType int
12
13const (
14 nilType valueType = iota
15 boolType
16 int32Type
17 int64Type
18 uint32Type
19 uint64Type
20 float32Type
21 float64Type
22 stringType
23 bytesType
24 enumType
25 ifaceType
26)
27
28// value is a union where only one type can be represented at a time.
29// This uses a distinct field for each type. This is type safe in Go, but
30// occupies more memory than necessary (72B).
31type value struct {
32 pragma.DoNotCompare // 0B
33
34 typ valueType // 8B
35 num uint64 // 8B
36 str string // 16B
37 bin []byte // 24B
38 iface interface{} // 16B
39}
40
41func valueOfString(v string) Value {
42 return Value{typ: stringType, str: v}
43}
44func valueOfBytes(v []byte) Value {
45 return Value{typ: bytesType, bin: v}
46}
47func valueOfIface(v interface{}) Value {
48 return Value{typ: ifaceType, iface: v}
49}
50
51func (v Value) getString() string {
52 return v.str
53}
54func (v Value) getBytes() []byte {
55 return v.bin
56}
57func (v Value) getIface() interface{} {
58 return v.iface
59}