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

#ifndef __Keywords_H__
#define __Keywords_H__

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


@protocol KeywordsKeywordCaller;
@class KeywordsKeywordCaller;

@protocol KeywordsKeywordCaller <NSObject>
- (void)abstract;
- (void)assert;
- (void)bool_;
- (void)boolean;
- (void)break;
- (void)byte;
- (void)case;
- (void)catch;
- (void)char_;
- (void)class;
- (void)const_;
- (void)continue;
- (void)default;
- (void)do;
- (void)double_;
- (void)else;
- (void)enum;
- (void)extends;
- (void)false;
- (void)final;
- (void)finally;
- (void)float_;
- (void)for;
- (void)goto;
- (void)if;
- (void)implements;
- (void)import;
- (void)instanceof;
- (void)int_;
- (void)interface;
- (void)long_;
- (void)native;
- (void)new;
- (void)nil_;
- (void)null;
- (void)package;
- (void)private;
- (void)protected;
- (void)public;
- (void)return;
- (void)short_;
- (void)static;
- (void)strictfp;
- (void)super_;
- (void)switch;
- (void)synchronized;
- (void)this;
- (void)throw;
- (void)throws;
- (void)transient;
- (void)true;
- (void)try;
- (void)void_;
- (void)volatile_;
- (void)while;
@end

FOUNDATION_EXPORT void KeywordsConst(NSString* _Nullable id_);

FOUNDATION_EXPORT void KeywordsStatic(NSString* _Nullable strictfp);

@class KeywordsKeywordCaller;

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

- (instancetype)initWithRef:(id)ref;
- (void)abstract;
- (void)assert;
- (void)bool_;
- (void)boolean;
- (void)break;
- (void)byte;
- (void)case;
- (void)catch;
- (void)char_;
- (void)class;
- (void)const_;
- (void)continue;
- (void)default;
- (void)do;
- (void)double_;
- (void)else;
- (void)enum;
- (void)extends;
- (void)false;
- (void)final;
- (void)finally;
- (void)float_;
- (void)for;
- (void)goto;
- (void)if;
- (void)implements;
- (void)import;
- (void)instanceof;
- (void)int_;
- (void)interface;
- (void)long_;
- (void)native;
- (void)new;
- (void)nil_;
- (void)null;
- (void)package;
- (void)private;
- (void)protected;
- (void)public;
- (void)return;
- (void)short_;
- (void)static;
- (void)strictfp;
- (void)super_;
- (void)switch;
- (void)synchronized;
- (void)this;
- (void)throw;
- (void)throws;
- (void)transient;
- (void)true;
- (void)try;
- (void)void_;
- (void)volatile_;
- (void)while;
@end

#endif
