// 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;
@class GoVarsI;

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

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

@protocol GoVarsI
@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
