// Objective-C API for talking to issue12328 Go package.
//   gobind -lang=objc issue12328
//
// File is generated by gobind. Do not edit.

#include <Foundation/Foundation.h>
#include "seq.h"
#include "_cgo_export.h"
#include "Issue12328.objc.h"


@implementation Issue12328T {
}

- (nonnull instancetype)initWithRef:(_Nonnull id)ref {
	self = [super init];
	if (self) { __ref = ref; }
	return self;
}

- (nonnull instancetype)init {
	self = [super init];
	if (self) {
		__ref = go_seq_from_refnum(new_issue12328_T());
	}
	return self;
}

- (NSError* _Nullable)err {
	int32_t refnum = go_seq_go_to_refnum(self._ref);
	int32_t r0 = proxyissue12328_T_Err_Get(refnum);
	Universeerror* _r0 = nil;
	GoSeqRef* _r0_ref = go_seq_from_refnum(r0);
	if (_r0_ref != NULL) {
		_r0 = _r0_ref.obj;
		if (_r0 == nil) {
			_r0 = [[Universeerror alloc] initWithRef:_r0_ref];
		}
	}
	return _r0;
}

- (void)setErr:(NSError* _Nullable)v {
	int32_t refnum = go_seq_go_to_refnum(self._ref);
	int32_t _v;
	if ([v conformsToProtocol:@protocol(goSeqRefInterface)]) {
		id<goSeqRefInterface> v_proxy = (id<goSeqRefInterface>)(v);
		_v = go_seq_go_to_refnum(v_proxy._ref);
	} else {
		_v = go_seq_to_refnum(v);
	}
	proxyissue12328_T_Err_Set(refnum, _v);
}

@end



__attribute__((constructor)) static void init() {
	init_seq();
}
