// 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
