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

#ifndef __GoIgnore_H__
#define __GoIgnore_H__

#include <Foundation/Foundation.h>
#include "GoUniverse.h"

@class GoIgnoreS;
@protocol GoIgnoreI;
@class GoIgnoreI;

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

- (id)initWithRef:(id)ref;
// skipped field S.F with unsupported type: *types.Interface

// skipped method S.Argument with unsupported parameter or return types

// skipped method S.Result with unsupported parameter or return types

@end

@protocol GoIgnoreI
// skipped method I.Argument with unsupported parameter or return types

// skipped method I.Result with unsupported parameter or return types

@end

// skipped const NamedConst with unsupported type: *types.Const


@interface GoIgnore : NSObject
// skipped variable V with unsupported type: *types.Interface

// skipped variable Var with unsupported type: *types.Interface

@end

// skipped function Argument with unsupported parameter or return types


// skipped function Result with unsupported parameter or return types


@class GoIgnoreI;

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

- (id)initWithRef:(id)ref;
// skipped method I.Argument with unsupported parameter or return types

// skipped method I.Result with unsupported parameter or return types

@end

#endif
