// Objective-C API for talking to golang.org/x/mobile/bind/objc/testpkg Go package.
//   gobind -lang=objc golang.org/x/mobile/bind/objc/testpkg
//
// File is generated by gobind. Do not edit.

#ifndef __GoTestpkg_H__
#define __GoTestpkg_H__

#include <Foundation/Foundation.h>

@protocol GoTestpkgI
- (void)Fn:(int32_t)v;
@end

@interface GoTestpkgI : NSObject {
}
@property (strong, readonly) id ref;
@property (weak, readonly, nonatomic) id delegate;

- (void)call:(int)code in:(void *)in out:(void *)out;
@end

@class GoTestpkgS;

@interface GoTestpkgS : NSObject {
}
@property(strong, readonly) id ref;

- (id)initWithRef:(id)ref;
- (double)X;
- (void)setX:(double)v;
- (double)Y;
- (void)setY:(double)v;
- (double)Sum;
@end

FOUNDATION_EXPORT NSData* GoTestpkgBytesAppend(NSData* a, NSData* b);

FOUNDATION_EXPORT void GoTestpkgCallI(GoTestpkgI* i, int32_t v);

FOUNDATION_EXPORT double GoTestpkgCallSSum(GoTestpkgS* s);

FOUNDATION_EXPORT int GoTestpkgCollectS(int want, int timeoutSec);

FOUNDATION_EXPORT NSString* GoTestpkgHello(NSString* s);

FOUNDATION_EXPORT void GoTestpkgHi();

FOUNDATION_EXPORT void GoTestpkgInt(int32_t x);

FOUNDATION_EXPORT GoTestpkgS* GoTestpkgNewS(double x, double y);

FOUNDATION_EXPORT BOOL GoTestpkgReturnsError(BOOL b, NSString** ret0_, NSError** error);

FOUNDATION_EXPORT int64_t GoTestpkgSum(int64_t x, int64_t y);

#endif
