// 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 "GoIssue12328.h"


@implementation GoIssue12328T {
}

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

- (NSError*)err {
	int32_t refnum = go_seq_go_to_refnum(self._ref);
	int32_t r0 = proxyissue12328_T_Err_Get(refnum);
	GoUniverseerror* _r0 = nil;
	GoSeqRef* _r0_ref = go_seq_from_refnum(r0);
	if (_r0_ref != NULL) {
		_r0 = _r0_ref.obj;
		if (_r0 == nil) {
			_r0 = [[GoUniverseerror 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();
}
