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

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


@implementation Issue10788TestStruct {
}

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

- (NSString* _Nonnull)value {
	int32_t refnum = go_seq_go_to_refnum(self._ref);
	nstring r0 = proxyissue10788_TestStruct_Value_Get(refnum);
	NSString *_r0 = go_seq_to_objc_string(r0);
	return _r0;
}

- (void)setValue:(NSString* _Nonnull)v {
	int32_t refnum = go_seq_go_to_refnum(self._ref);
	nstring _v = go_seq_from_objc_string(v);
	proxyissue10788_TestStruct_Value_Set(refnum, _v);
}

@end


@implementation Issue10788TestInterface {
}

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

- (void)doSomeWork:(Issue10788TestStruct* _Nullable)s {
	int32_t refnum = go_seq_go_to_refnum(self._ref);
	int32_t _s;
	if ([s conformsToProtocol:@protocol(goSeqRefInterface)]) {
		id<goSeqRefInterface> s_proxy = (id<goSeqRefInterface>)(s);
		_s = go_seq_go_to_refnum(s_proxy._ref);
	} else {
		_s = go_seq_to_refnum(s);
	}
	proxyissue10788_TestInterface_DoSomeWork(refnum, _s);
}

- (void)multipleUnnamedParams:(long)p0 p1:(NSString* _Nullable)p1 日本:(int64_t)日本 {
	int32_t refnum = go_seq_go_to_refnum(self._ref);
	nint _p0 = (nint)p0;
	nstring _p1 = go_seq_from_objc_string(p1);
	int64_t _日本 = (int64_t)日本;
	proxyissue10788_TestInterface_MultipleUnnamedParams(refnum, _p0, _p1, _日本);
}

@end



void cproxyissue10788_TestInterface_DoSomeWork(int32_t refnum, int32_t s) {
	@autoreleasepool {
		Issue10788TestInterface* o = go_seq_objc_from_refnum(refnum);
		Issue10788TestStruct* _s = nil;
		GoSeqRef* _s_ref = go_seq_from_refnum(s);
		if (_s_ref != NULL) {
			_s = _s_ref.obj;
			if (_s == nil) {
				_s = [[Issue10788TestStruct alloc] initWithRef:_s_ref];
			}
		}
		[o doSomeWork:_s];
	}
}

void cproxyissue10788_TestInterface_MultipleUnnamedParams(int32_t refnum, nint p0, nstring p1, int64_t 日本) {
	@autoreleasepool {
		Issue10788TestInterface* o = go_seq_objc_from_refnum(refnum);
		long _p0 = (long)p0;
		NSString *_p1 = go_seq_to_objc_string(p1);
		int64_t _日本 = (int64_t)日本;
		[o multipleUnnamedParams:_p0 p1:_p1 日本:_日本];
	}
}

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