// Package go_issue12328 is an autogenerated binder stub for package issue12328.
//   gobind -lang=go issue12328
//
// File is generated by gobind. Do not edit.
package go_issue12328

import (
	"golang.org/x/mobile/bind/seq"
	"issue12328"
)

const (
	proxyT_Descriptor   = "go.issue12328.T"
	proxyT_Err_Get_Code = 0x00f
	proxyT_Err_Set_Code = 0x01f
)

type proxyT seq.Ref

func proxyT_Err_Set(out, in *seq.Buffer) {
	ref := in.ReadRef()
	v := in.ReadError()
	ref.Get().(*issue12328.T).Err = v
}

func proxyT_Err_Get(out, in *seq.Buffer) {
	ref := in.ReadRef()
	v := ref.Get().(*issue12328.T).Err
	if v == nil {
		out.WriteString("")
	} else {
		out.WriteString(v.Error())
	}
}

func init() {
	seq.Register(proxyT_Descriptor, proxyT_Err_Set_Code, proxyT_Err_Set)
	seq.Register(proxyT_Descriptor, proxyT_Err_Get_Code, proxyT_Err_Get)
}
