// 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 "ref.h"
#include "Universe.objc.h"


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

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

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

- (nonnull instancetype)initWithRef:(id)ref;
- (nonnull instancetype)init;
@property (nonatomic) double x;
@property (nonatomic) double y;
- (StructsS* _Nullable)identity:(NSError* _Nullable*)error;
- (double)sum;
@end

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

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

/**
 * Structs is a struct with the same name as its package.
 */
@interface StructsStructs : NSObject <goSeqRefInterface, StructsI> {
}
@property(strong, readonly) id _ref;

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

FOUNDATION_EXPORT StructsS* _Nullable StructsIdentity(StructsS* _Nullable s);

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

@class StructsI;

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

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

#endif
