// 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>
#include "GoUniverse.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;

+ (long) anInt;
+ (void) setAnInt:(long)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

@class GoVarsI;

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

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

#endif
