// 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 ([(id<NSObject>)(v) isKindOfClass:[GoUniverseerror class]]) {
		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();
}
