// Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// +build purego appengine

package protoreflect

import "google.golang.org/protobuf/internal/pragma"

type valueType int

const (
	nilType valueType = iota
	boolType
	int32Type
	int64Type
	uint32Type
	uint64Type
	float32Type
	float64Type
	stringType
	bytesType
	enumType
	ifaceType
)

// value is a union where only one type can be represented at a time.
// This uses a distinct field for each type. This is type safe in Go, but
// occupies more memory than necessary (72B).
type value struct {
	pragma.DoNotCompare // 0B

	typ   valueType   // 8B
	num   uint64      // 8B
	str   string      // 16B
	bin   []byte      // 24B
	iface interface{} // 16B
}

func valueOfString(v string) Value {
	return Value{typ: stringType, str: v}
}
func valueOfBytes(v []byte) Value {
	return Value{typ: bytesType, bin: v}
}
func valueOfIface(v interface{}) Value {
	return Value{typ: ifaceType, iface: v}
}

func (v Value) getString() string {
	return v.str
}
func (v Value) getBytes() []byte {
	return v.bin
}
func (v Value) getIface() interface{} {
	return v.iface
}
