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

- (nonnull instancetype)initWithRef:(id)ref;
- (nonnull 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* _Nonnull) aString;
+ (void) setAString:(NSString* _Nonnull)v;

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

@end

@class VarsI;

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

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

#endif
