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

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

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

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

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

@protocol StructsI <NSObject>
- (void)m;
@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
