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

#ifndef __GoVars_H__
#define __GoVars_H__

#include <Foundation/Foundation.h>

@class GoVarsS;

@protocol GoVarsI
@end

@interface GoVarsS : NSObject {
}
@property(strong, readonly) id ref;

- (id)initWithRef:(id)ref;
@end

@interface GoVars : NSObject 
+ (BOOL) ABool;
+ (void) setABool:(BOOL)v;
+ (double) AFloat;
+ (void) setAFloat:(double)v;
+ (float) AFloat32;
+ (void) setAFloat32:(float)v;
+ (double) AFloat64;
+ (void) setAFloat64:(double)v;
+ (NSString*) AString;
+ (void) setAString:(NSString*)v;
+ (GoVarsS*) AStructPtr;
+ (void) setAStructPtr:(GoVarsS*)v;
+ (int) AnInt;
+ (void) setAnInt:(int)v;
+ (int16_t) AnInt16;
+ (void) setAnInt16:(int16_t)v;
+ (int32_t) AnInt32;
+ (void) setAnInt32:(int32_t)v;
+ (int64_t) AnInt64;
+ (void) setAnInt64:(int64_t)v;
+ (int8_t) AnInt8;
+ (void) setAnInt8:(int8_t)v;
+ (id<GoVarsI>) AnInterface;
+ (void) setAnInterface:(id<GoVarsI>)v;
@end
#endif
