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

/*
#include <stdlib.h>
#include <stdint.h>
#include "seq.h"
#include "universe.h"

*/
import "C"

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

// suppress the error if seq ends up unused
var _ = _seq.FromRefNum

//export proxy_error_Error
func proxy_error_Error(refnum C.int32_t) C.nstring {
	ref := _seq.FromRefNum(int32(refnum))
	v := ref.Get().(error)
	res_0 := v.Error()
	_res_0 := encodeString(res_0)
	return _res_0
}

type proxy_error _seq.Ref

func (p *proxy_error) Bind_proxy_refnum__() int32 { return (*_seq.Ref)(p).Bind_IncNum() }

func (p *proxy_error) Error() string {
	res := C.cproxy_error_Error(C.int32_t(p.Bind_proxy_refnum__()))
	_res := decodeString(res)
	return _res
}
