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

#ifndef __GoInterfaces_H__
#define __GoInterfaces_H__

#include <Foundation/Foundation.h>

@protocol GoInterfacesError;
@class GoInterfacesError;
@protocol GoInterfacesI;
@class GoInterfacesI;
@protocol GoInterfacesI1;
@protocol GoInterfacesI2;
@protocol GoInterfacesI3;
@class GoInterfacesI3;
@protocol GoInterfacesWithParam;
@class GoInterfacesWithParam;

@protocol GoInterfacesError
- (BOOL)err:(NSError**)error;
@end

@protocol GoInterfacesI
- (int32_t)rand;
@end

@interface GoInterfacesI1 : NSObject {
}
@property(strong, readonly) id _ref;

- (id)initWithRef:(id)ref;
- (void)j;
@end

@interface GoInterfacesI2 : NSObject {
}
@property(strong, readonly) id _ref;

- (id)initWithRef:(id)ref;
- (void)g;
@end

@protocol GoInterfacesI3
- (GoInterfacesI1*)f;
@end

@protocol GoInterfacesWithParam
- (void)hasParam:(BOOL)p0;
@end

FOUNDATION_EXPORT int32_t GoInterfacesAdd3(id<GoInterfacesI> r);

FOUNDATION_EXPORT BOOL GoInterfacesCallErr(id<GoInterfacesError> e, NSError** error);

FOUNDATION_EXPORT id<GoInterfacesI> GoInterfacesSeven();

#endif
