// 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>

@class GoInterfacesI1;

@class GoInterfacesI2;

@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
