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

#ifndef __Structs_H__
#define __Structs_H__

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


@class StructsS;
@class StructsS2;
@protocol StructsI;
@class StructsI;

@protocol StructsI <NSObject>
- (void)m;
@end

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

- (instancetype)initWithRef:(id)ref;
- (instancetype)init;
- (double)x;
- (void)setX:(double)v;
- (double)y;
- (void)setY:(double)v;
- (StructsS*)identity:(NSError**)error;
- (double)sum;
@end

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

- (instancetype)initWithRef:(id)ref;
- (instancetype)init;
- (void)m;
- (NSString*)string;
@end

FOUNDATION_EXPORT StructsS* StructsIdentity(StructsS* s);

FOUNDATION_EXPORT StructsS* StructsIdentityWithError(StructsS* s, NSError** error);

@class StructsI;

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

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

#endif
