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