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

#ifndef __Vars_H__
#define __Vars_H__

@import Foundation;
#include "ref.h"
#include "Universe.objc.h"


@class VarsS;
@protocol VarsI;
@class VarsI;

@protocol VarsI <NSObject>
@end

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

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

@interface Vars : 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;

+ (VarsS*) aStructPtr;
+ (void) setAStructPtr:(VarsS*)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<VarsI>) anInterface;
+ (void) setAnInterface:(id<VarsI>)v;

@end

@class VarsI;

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

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

#endif
