// 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 {
}

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

- (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();
}
