// This file is generated and will be overwritten automatically.

#import <Foundation/Foundation.h>

@class MBNNBorderCrossingInfo;
@class MBNNIncidentInfo;
@class MBNNRailwayCrossingInfo;
@class MBNNServiceAreaInfo;
@class MBNNTollCollectionInfo;
@class MBNNTunnelInfo;
// NOLINTNEXTLINE(modernize-use-using)
typedef NS_ENUM(NSInteger, MBNNRoadObjectMetadataType)
{
    MBNNRoadObjectMetadataTypeIncidentInfo,
    MBNNRoadObjectMetadataTypeTunnelInfo,
    MBNNRoadObjectMetadataTypeBorderCrossingInfo,
    MBNNRoadObjectMetadataTypeTollCollectionInfo,
    MBNNRoadObjectMetadataTypeServiceAreaInfo,
    MBNNRoadObjectMetadataTypeRailwayCrossingInfo
} NS_SWIFT_NAME(RoadObjectMetadataType);

NS_SWIFT_NAME(RoadObjectMetadata)
__attribute__((visibility ("default")))
@interface MBNNRoadObjectMetadata : NSObject

- (nonnull instancetype)initWithValue:(nonnull id)value __attribute__((deprecated("Please use: '+from{TypeName}:' instead.")));

+ (nonnull instancetype)fromIncidentInfo:(nonnull MBNNIncidentInfo *)value;
+ (nonnull instancetype)fromTunnelInfo:(nonnull MBNNTunnelInfo *)value;
+ (nonnull instancetype)fromBorderCrossingInfo:(nonnull MBNNBorderCrossingInfo *)value;
+ (nonnull instancetype)fromTollCollectionInfo:(nonnull MBNNTollCollectionInfo *)value;
+ (nonnull instancetype)fromServiceAreaInfo:(nonnull MBNNServiceAreaInfo *)value;
+ (nonnull instancetype)fromRailwayCrossingInfo:(nonnull MBNNRailwayCrossingInfo *)value;

- (BOOL)isIncidentInfo;
- (BOOL)isTunnelInfo;
- (BOOL)isBorderCrossingInfo;
- (BOOL)isTollCollectionInfo;
- (BOOL)isServiceAreaInfo;
- (BOOL)isRailwayCrossingInfo;

- (nonnull MBNNIncidentInfo *)getIncidentInfo __attribute((ns_returns_retained));
- (nonnull MBNNTunnelInfo *)getTunnelInfo __attribute((ns_returns_retained));
- (nonnull MBNNBorderCrossingInfo *)getBorderCrossingInfo __attribute((ns_returns_retained));
- (nonnull MBNNTollCollectionInfo *)getTollCollectionInfo __attribute((ns_returns_retained));
- (nonnull MBNNServiceAreaInfo *)getServiceAreaInfo __attribute((ns_returns_retained));
- (nonnull MBNNRailwayCrossingInfo *)getRailwayCrossingInfo __attribute((ns_returns_retained));

@property (nonatomic, nonnull) id value;

@property (nonatomic, readonly) MBNNRoadObjectMetadataType type;

@end
