// 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) _Nonnull id _ref;

- (nonnull instancetype)initWithRef:(_Nonnull 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
