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

#ifndef __Interfaces_H__
#define __Interfaces_H__

@import Foundation;
#include "ref.h"
#include "Universe.objc.h"


@protocol InterfacesError;
@class InterfacesError;
@protocol InterfacesI;
@class InterfacesI;
@protocol InterfacesI1;
@protocol InterfacesI2;
@protocol InterfacesI3;
@class InterfacesI3;
@protocol InterfacesInterfaces;
@class InterfacesInterfaces;
@protocol InterfacesLargerI;
@class InterfacesLargerI;
@protocol InterfacesSameI;
@class InterfacesSameI;
@protocol InterfacesWithParam;
@class InterfacesWithParam;

@protocol InterfacesError <NSObject>
- (BOOL)err:(NSError* _Nullable*)error;
@end

@protocol InterfacesI <NSObject>
- (int32_t)rand;
@end

/**
 * not implementable
 */
@interface InterfacesI1 : NSObject <goSeqRefInterface> {
}
@property(strong, readonly) id _ref;

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

/**
 * not implementable
 */
@interface InterfacesI2 : NSObject <goSeqRefInterface> {
}
@property(strong, readonly) id _ref;

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

@protocol InterfacesI3 <NSObject>
- (InterfacesI1* _Nullable)f;
@end

@protocol InterfacesInterfaces <NSObject>
- (void)someMethod;
@end

@protocol InterfacesLargerI <NSObject>
- (void)anotherFunc;
- (int32_t)rand;
@end

@protocol InterfacesSameI <NSObject>
- (int32_t)rand;
@end

@protocol InterfacesWithParam <NSObject>
- (void)hasParam:(BOOL)p0;
@end

FOUNDATION_EXPORT int32_t InterfacesAdd3(id<InterfacesI> _Nullable r);

FOUNDATION_EXPORT BOOL InterfacesCallErr(id<InterfacesError> _Nullable e, NSError* _Nullable* error);

FOUNDATION_EXPORT id<InterfacesI> _Nullable InterfacesSeven(void);

@class InterfacesError;

@class InterfacesI;

@class InterfacesI3;

@class InterfacesInterfaces;

@class InterfacesLargerI;

@class InterfacesSameI;

@class InterfacesWithParam;

@interface InterfacesError : NSObject <goSeqRefInterface, InterfacesError> {
}
@property(strong, readonly) id _ref;

- (instancetype)initWithRef:(id)ref;
- (BOOL)err:(NSError* _Nullable*)error;
@end

@interface InterfacesI : NSObject <goSeqRefInterface, InterfacesI> {
}
@property(strong, readonly) id _ref;

- (instancetype)initWithRef:(id)ref;
- (int32_t)rand;
@end

/**
 * implementable
(the implementor has to find a source of I1s)
 */
@interface InterfacesI3 : NSObject <goSeqRefInterface, InterfacesI3> {
}
@property(strong, readonly) id _ref;

- (instancetype)initWithRef:(id)ref;
- (InterfacesI1* _Nullable)f;
@end

/**
 * Interfaces is an interface with the same name as its package.
 */
@interface InterfacesInterfaces : NSObject <goSeqRefInterface, InterfacesInterfaces> {
}
@property(strong, readonly) id _ref;

- (instancetype)initWithRef:(id)ref;
- (void)someMethod;
@end

@interface InterfacesLargerI : NSObject <goSeqRefInterface, InterfacesLargerI> {
}
@property(strong, readonly) id _ref;

- (instancetype)initWithRef:(id)ref;
- (void)anotherFunc;
- (int32_t)rand;
@end

@interface InterfacesSameI : NSObject <goSeqRefInterface, InterfacesSameI> {
}
@property(strong, readonly) id _ref;

- (instancetype)initWithRef:(id)ref;
- (int32_t)rand;
@end

@interface InterfacesWithParam : NSObject <goSeqRefInterface, InterfacesWithParam> {
}
@property(strong, readonly) id _ref;

- (instancetype)initWithRef:(id)ref;
- (void)hasParam:(BOOL)p0;
@end

#endif
