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

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

*/
import "C"

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

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

// skipped field S.F with unsupported type: *types.Interface

// skipped method S.Argument with unsupported parameter or return types

// skipped method S.Result with unsupported parameter or return types

// skipped method I.Argument with unsupported parameter or return types

// skipped method I.Result with unsupported parameter or return types

type proxyignore_I _seq.Ref

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

// skipped method I.Argument with unsupported parameter or result types
// skipped method I.Result with unsupported parameter or result types
// skipped variable V with unsupported type *types.Interface

// skipped variable Var with unsupported type *types.Interface

// skipped function Argument with unsupported parameter or result types
// skipped function Result with unsupported parameter or result types
