// Generated by the protocol buffer compiler.  DO NOT EDIT!
// clang-format off
// source: deviceapis/device/v1/deviceapis_device_relay_v1.proto

// This CPP symbol can be defined to use imports that match up to the framework
// imports needed when using CocoaPods.
#if !defined(GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS)
 #define GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS 0
#endif

#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS
 #import <Protobuf/GPBProtocolBuffers_RuntimeSupport.h>
#else
 #import "GPBProtocolBuffers_RuntimeSupport.h"
#endif

#if GOOGLE_PROTOBUF_OBJC_VERSION < 30007
#error This file was generated by a newer version of protoc which is incompatible with your Protocol Buffer library sources.
#endif
#if 30007 < GOOGLE_PROTOBUF_OBJC_MIN_SUPPORTED_VERSION
#error This file was generated by an older version of protoc which is incompatible with your Protocol Buffer library sources.
#endif

#import <stdatomic.h>

#import "deviceapis/device/v1/DeviceapisDeviceRelayV1.pbobjc.h"
#import "google/api/Annotations.pbobjc.h"
#import "google/api/FieldBehavior.pbobjc.h"
#import "deviceapis/device/v1/DeviceapisDeviceCommonV1.pbobjc.h"
#import "protoc-gen-openapiv2/options/Annotations.pbobjc.h"
// @@protoc_insertion_point(imports)

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
#pragma clang diagnostic ignored "-Wdirect-ivar-access"
#pragma clang diagnostic ignored "-Wdollar-in-identifier-extension"

#pragma mark - Objective-C Class declarations
// Forward declarations of Objective-C classes that we can use as
// static values in struct initializers.
// We don't use [Foo class] because it is not a static value.
GPBObjCClassDeclaration(DEVICEAPISDEVICEV1EditRelayPropsDtmfRequest);
GPBObjCClassDeclaration(DEVICEAPISDEVICEV1EditRelayPropsDtmfResponse);
GPBObjCClassDeclaration(DEVICEAPISDEVICEV1EditRelayPropsDtmfResponse_Error);
GPBObjCClassDeclaration(DEVICEAPISDEVICEV1EditRelayPropsOpenRequest);
GPBObjCClassDeclaration(DEVICEAPISDEVICEV1EditRelayPropsOpenResponse);
GPBObjCClassDeclaration(DEVICEAPISDEVICEV1EditRelayPropsOpenResponse_Error);
GPBObjCClassDeclaration(DEVICEAPISDEVICEV1GetRelayDtmfListRequest);
GPBObjCClassDeclaration(DEVICEAPISDEVICEV1GetRelayDtmfListResponse);
GPBObjCClassDeclaration(DEVICEAPISDEVICEV1GetRelayOpenListRequest);
GPBObjCClassDeclaration(DEVICEAPISDEVICEV1GetRelayOpenListResponse);
GPBObjCClassDeclaration(DEVICEAPISDEVICEV1GetRelayStatusListRequest);
GPBObjCClassDeclaration(DEVICEAPISDEVICEV1GetRelayStatusListResponse);
GPBObjCClassDeclaration(DEVICEAPISDEVICEV1PostRelayCloseRequest);
GPBObjCClassDeclaration(DEVICEAPISDEVICEV1PostRelayCloseResponse);
GPBObjCClassDeclaration(DEVICEAPISDEVICEV1PostRelayCloseResponse_Error);
GPBObjCClassDeclaration(DEVICEAPISDEVICEV1PostRelayOpenPermanentlyRequest);
GPBObjCClassDeclaration(DEVICEAPISDEVICEV1PostRelayOpenPermanentlyResponse);
GPBObjCClassDeclaration(DEVICEAPISDEVICEV1PostRelayOpenPermanentlyResponse_Error);
GPBObjCClassDeclaration(DEVICEAPISDEVICEV1PostRelayOpenRequest);
GPBObjCClassDeclaration(DEVICEAPISDEVICEV1PostRelayOpenResponse);
GPBObjCClassDeclaration(DEVICEAPISDEVICEV1PostRelayOpenResponse_Error);
GPBObjCClassDeclaration(DEVICEAPISDEVICEV1RelayDtmf);
GPBObjCClassDeclaration(DEVICEAPISDEVICEV1RelayOpen);
GPBObjCClassDeclaration(DEVICEAPISDEVICEV1RelayState);
GPBObjCClassDeclaration(DEVICEAPISDEVICEV1ValidationError);
GPBObjCClassDeclaration(GPBFieldMask);

#pragma mark - DEVICEAPISDEVICEV1DeviceapisDeviceRelayV1Root

@implementation DEVICEAPISDEVICEV1DeviceapisDeviceRelayV1Root

+ (GPBExtensionRegistry*)extensionRegistry {
  // This is called by +initialize so there is no need to worry
  // about thread safety and initialization of registry.
  static GPBExtensionRegistry* registry = nil;
  if (!registry) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    registry = [[GPBExtensionRegistry alloc] init];
    // Merge in the imports (direct or indirect) that defined extensions.
    [registry addExtensions:[GAPIAnnotationsRoot extensionRegistry]];
    [registry addExtensions:[GAPIFieldBehaviorRoot extensionRegistry]];
    [registry addExtensions:[AnnotationsRoot extensionRegistry]];
  }
  return registry;
}

@end

static GPBFileDescription DEVICEAPISDEVICEV1DeviceapisDeviceRelayV1Root_FileDescription = {
  .package = "deviceapis.device.v1",
  .prefix = "DEVICEAPISDEVICEV1",
  .syntax = GPBFileSyntaxProto3
};

#pragma mark - Enum DEVICEAPISDEVICEV1RelayState_StateType

GPBEnumDescriptor *DEVICEAPISDEVICEV1RelayState_StateType_EnumDescriptor(void) {
  static _Atomic(GPBEnumDescriptor*) descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static const char *valueNames =
        "StateTypeUnknown\000OpenTemporary\000Closed\000Op"
        "enPermanent\000";
    static const int32_t values[] = {
        DEVICEAPISDEVICEV1RelayState_StateType_StateTypeUnknown,
        DEVICEAPISDEVICEV1RelayState_StateType_OpenTemporary,
        DEVICEAPISDEVICEV1RelayState_StateType_Closed,
        DEVICEAPISDEVICEV1RelayState_StateType_OpenPermanent,
    };
    GPBEnumDescriptor *worker =
        [GPBEnumDescriptor allocDescriptorForName:GPBNSStringifySymbol(DEVICEAPISDEVICEV1RelayState_StateType)
                                       valueNames:valueNames
                                           values:values
                                            count:(uint32_t)(sizeof(values) / sizeof(int32_t))
                                     enumVerifier:DEVICEAPISDEVICEV1RelayState_StateType_IsValidValue
                                            flags:GPBEnumDescriptorInitializationFlag_None];
    GPBEnumDescriptor *expected = nil;
    if (!atomic_compare_exchange_strong(&descriptor, &expected, worker)) {
      [worker release];
    }
  }
  return descriptor;
}

BOOL DEVICEAPISDEVICEV1RelayState_StateType_IsValidValue(int32_t value__) {
  switch (value__) {
    case DEVICEAPISDEVICEV1RelayState_StateType_StateTypeUnknown:
    case DEVICEAPISDEVICEV1RelayState_StateType_OpenTemporary:
    case DEVICEAPISDEVICEV1RelayState_StateType_Closed:
    case DEVICEAPISDEVICEV1RelayState_StateType_OpenPermanent:
      return YES;
    default:
      return NO;
  }
}

#pragma mark - Enum DEVICEAPISDEVICEV1RelayOpen_LockType

GPBEnumDescriptor *DEVICEAPISDEVICEV1RelayOpen_LockType_EnumDescriptor(void) {
  static _Atomic(GPBEnumDescriptor*) descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static const char *valueNames =
        "LockTypeUnknown\000Electromagnetic\000Electrom"
        "echanical\000";
    static const int32_t values[] = {
        DEVICEAPISDEVICEV1RelayOpen_LockType_LockTypeUnknown,
        DEVICEAPISDEVICEV1RelayOpen_LockType_Electromagnetic,
        DEVICEAPISDEVICEV1RelayOpen_LockType_Electromechanical,
    };
    GPBEnumDescriptor *worker =
        [GPBEnumDescriptor allocDescriptorForName:GPBNSStringifySymbol(DEVICEAPISDEVICEV1RelayOpen_LockType)
                                       valueNames:valueNames
                                           values:values
                                            count:(uint32_t)(sizeof(values) / sizeof(int32_t))
                                     enumVerifier:DEVICEAPISDEVICEV1RelayOpen_LockType_IsValidValue
                                            flags:GPBEnumDescriptorInitializationFlag_None];
    GPBEnumDescriptor *expected = nil;
    if (!atomic_compare_exchange_strong(&descriptor, &expected, worker)) {
      [worker release];
    }
  }
  return descriptor;
}

BOOL DEVICEAPISDEVICEV1RelayOpen_LockType_IsValidValue(int32_t value__) {
  switch (value__) {
    case DEVICEAPISDEVICEV1RelayOpen_LockType_LockTypeUnknown:
    case DEVICEAPISDEVICEV1RelayOpen_LockType_Electromagnetic:
    case DEVICEAPISDEVICEV1RelayOpen_LockType_Electromechanical:
      return YES;
    default:
      return NO;
  }
}

#pragma mark - DEVICEAPISDEVICEV1PostRelayCloseRequest

@implementation DEVICEAPISDEVICEV1PostRelayCloseRequest

@dynamic relayIndex;

typedef struct DEVICEAPISDEVICEV1PostRelayCloseRequest__storage_ {
  uint32_t _has_storage_[1];
  int32_t relayIndex;
} DEVICEAPISDEVICEV1PostRelayCloseRequest__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "relayIndex",
        .dataTypeSpecific.clazz = Nil,
        .number = DEVICEAPISDEVICEV1PostRelayCloseRequest_FieldNumber_RelayIndex,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(DEVICEAPISDEVICEV1PostRelayCloseRequest__storage_, relayIndex),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeInt32,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(DEVICEAPISDEVICEV1PostRelayCloseRequest)
                                   messageName:@"PostRelayCloseRequest"
                               fileDescription:&DEVICEAPISDEVICEV1DeviceapisDeviceRelayV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(DEVICEAPISDEVICEV1PostRelayCloseRequest__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - DEVICEAPISDEVICEV1PostRelayCloseResponse

@implementation DEVICEAPISDEVICEV1PostRelayCloseResponse

@dynamic typeOneOfCase;
@dynamic error;

typedef struct DEVICEAPISDEVICEV1PostRelayCloseResponse__storage_ {
  uint32_t _has_storage_[2];
  DEVICEAPISDEVICEV1PostRelayCloseResponse_Error *error;
} DEVICEAPISDEVICEV1PostRelayCloseResponse__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "error",
        .dataTypeSpecific.clazz = GPBObjCClass(DEVICEAPISDEVICEV1PostRelayCloseResponse_Error),
        .number = DEVICEAPISDEVICEV1PostRelayCloseResponse_FieldNumber_Error,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(DEVICEAPISDEVICEV1PostRelayCloseResponse__storage_, error),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(DEVICEAPISDEVICEV1PostRelayCloseResponse)
                                   messageName:@"PostRelayCloseResponse"
                               fileDescription:&DEVICEAPISDEVICEV1DeviceapisDeviceRelayV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(DEVICEAPISDEVICEV1PostRelayCloseResponse__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    static const char *oneofs[] = {
      "type",
    };
    [localDescriptor setupOneofs:oneofs
                           count:(uint32_t)(sizeof(oneofs) / sizeof(char*))
                   firstHasIndex:-1];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

void DEVICEAPISDEVICEV1PostRelayCloseResponse_ClearTypeOneOfCase(DEVICEAPISDEVICEV1PostRelayCloseResponse *message) {
  GPBDescriptor *descriptor = [DEVICEAPISDEVICEV1PostRelayCloseResponse descriptor];
  GPBOneofDescriptor *oneof = [descriptor.oneofs objectAtIndex:0];
  GPBClearOneof(message, oneof);
}
#pragma mark - DEVICEAPISDEVICEV1PostRelayCloseResponse_Error

@implementation DEVICEAPISDEVICEV1PostRelayCloseResponse_Error

@dynamic reasonOneOfCase;
@dynamic validation;

typedef struct DEVICEAPISDEVICEV1PostRelayCloseResponse_Error__storage_ {
  uint32_t _has_storage_[2];
  DEVICEAPISDEVICEV1ValidationError *validation;
} DEVICEAPISDEVICEV1PostRelayCloseResponse_Error__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "validation",
        .dataTypeSpecific.clazz = GPBObjCClass(DEVICEAPISDEVICEV1ValidationError),
        .number = DEVICEAPISDEVICEV1PostRelayCloseResponse_Error_FieldNumber_Validation,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(DEVICEAPISDEVICEV1PostRelayCloseResponse_Error__storage_, validation),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(DEVICEAPISDEVICEV1PostRelayCloseResponse_Error)
                                   messageName:@"Error"
                               fileDescription:&DEVICEAPISDEVICEV1DeviceapisDeviceRelayV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(DEVICEAPISDEVICEV1PostRelayCloseResponse_Error__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    static const char *oneofs[] = {
      "reason",
    };
    [localDescriptor setupOneofs:oneofs
                           count:(uint32_t)(sizeof(oneofs) / sizeof(char*))
                   firstHasIndex:-1];
    [localDescriptor setupContainingMessageClass:GPBObjCClass(DEVICEAPISDEVICEV1PostRelayCloseResponse)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

void DEVICEAPISDEVICEV1PostRelayCloseResponse_Error_ClearReasonOneOfCase(DEVICEAPISDEVICEV1PostRelayCloseResponse_Error *message) {
  GPBDescriptor *descriptor = [DEVICEAPISDEVICEV1PostRelayCloseResponse_Error descriptor];
  GPBOneofDescriptor *oneof = [descriptor.oneofs objectAtIndex:0];
  GPBClearOneof(message, oneof);
}
#pragma mark - DEVICEAPISDEVICEV1PostRelayOpenPermanentlyRequest

@implementation DEVICEAPISDEVICEV1PostRelayOpenPermanentlyRequest

@dynamic relayIndex;

typedef struct DEVICEAPISDEVICEV1PostRelayOpenPermanentlyRequest__storage_ {
  uint32_t _has_storage_[1];
  int32_t relayIndex;
} DEVICEAPISDEVICEV1PostRelayOpenPermanentlyRequest__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "relayIndex",
        .dataTypeSpecific.clazz = Nil,
        .number = DEVICEAPISDEVICEV1PostRelayOpenPermanentlyRequest_FieldNumber_RelayIndex,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(DEVICEAPISDEVICEV1PostRelayOpenPermanentlyRequest__storage_, relayIndex),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeInt32,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(DEVICEAPISDEVICEV1PostRelayOpenPermanentlyRequest)
                                   messageName:@"PostRelayOpenPermanentlyRequest"
                               fileDescription:&DEVICEAPISDEVICEV1DeviceapisDeviceRelayV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(DEVICEAPISDEVICEV1PostRelayOpenPermanentlyRequest__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - DEVICEAPISDEVICEV1PostRelayOpenPermanentlyResponse

@implementation DEVICEAPISDEVICEV1PostRelayOpenPermanentlyResponse

@dynamic typeOneOfCase;
@dynamic error;

typedef struct DEVICEAPISDEVICEV1PostRelayOpenPermanentlyResponse__storage_ {
  uint32_t _has_storage_[2];
  DEVICEAPISDEVICEV1PostRelayOpenPermanentlyResponse_Error *error;
} DEVICEAPISDEVICEV1PostRelayOpenPermanentlyResponse__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "error",
        .dataTypeSpecific.clazz = GPBObjCClass(DEVICEAPISDEVICEV1PostRelayOpenPermanentlyResponse_Error),
        .number = DEVICEAPISDEVICEV1PostRelayOpenPermanentlyResponse_FieldNumber_Error,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(DEVICEAPISDEVICEV1PostRelayOpenPermanentlyResponse__storage_, error),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(DEVICEAPISDEVICEV1PostRelayOpenPermanentlyResponse)
                                   messageName:@"PostRelayOpenPermanentlyResponse"
                               fileDescription:&DEVICEAPISDEVICEV1DeviceapisDeviceRelayV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(DEVICEAPISDEVICEV1PostRelayOpenPermanentlyResponse__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    static const char *oneofs[] = {
      "type",
    };
    [localDescriptor setupOneofs:oneofs
                           count:(uint32_t)(sizeof(oneofs) / sizeof(char*))
                   firstHasIndex:-1];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

void DEVICEAPISDEVICEV1PostRelayOpenPermanentlyResponse_ClearTypeOneOfCase(DEVICEAPISDEVICEV1PostRelayOpenPermanentlyResponse *message) {
  GPBDescriptor *descriptor = [DEVICEAPISDEVICEV1PostRelayOpenPermanentlyResponse descriptor];
  GPBOneofDescriptor *oneof = [descriptor.oneofs objectAtIndex:0];
  GPBClearOneof(message, oneof);
}
#pragma mark - DEVICEAPISDEVICEV1PostRelayOpenPermanentlyResponse_Error

@implementation DEVICEAPISDEVICEV1PostRelayOpenPermanentlyResponse_Error

@dynamic reasonOneOfCase;
@dynamic validation;

typedef struct DEVICEAPISDEVICEV1PostRelayOpenPermanentlyResponse_Error__storage_ {
  uint32_t _has_storage_[2];
  DEVICEAPISDEVICEV1ValidationError *validation;
} DEVICEAPISDEVICEV1PostRelayOpenPermanentlyResponse_Error__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "validation",
        .dataTypeSpecific.clazz = GPBObjCClass(DEVICEAPISDEVICEV1ValidationError),
        .number = DEVICEAPISDEVICEV1PostRelayOpenPermanentlyResponse_Error_FieldNumber_Validation,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(DEVICEAPISDEVICEV1PostRelayOpenPermanentlyResponse_Error__storage_, validation),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(DEVICEAPISDEVICEV1PostRelayOpenPermanentlyResponse_Error)
                                   messageName:@"Error"
                               fileDescription:&DEVICEAPISDEVICEV1DeviceapisDeviceRelayV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(DEVICEAPISDEVICEV1PostRelayOpenPermanentlyResponse_Error__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    static const char *oneofs[] = {
      "reason",
    };
    [localDescriptor setupOneofs:oneofs
                           count:(uint32_t)(sizeof(oneofs) / sizeof(char*))
                   firstHasIndex:-1];
    [localDescriptor setupContainingMessageClass:GPBObjCClass(DEVICEAPISDEVICEV1PostRelayOpenPermanentlyResponse)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

void DEVICEAPISDEVICEV1PostRelayOpenPermanentlyResponse_Error_ClearReasonOneOfCase(DEVICEAPISDEVICEV1PostRelayOpenPermanentlyResponse_Error *message) {
  GPBDescriptor *descriptor = [DEVICEAPISDEVICEV1PostRelayOpenPermanentlyResponse_Error descriptor];
  GPBOneofDescriptor *oneof = [descriptor.oneofs objectAtIndex:0];
  GPBClearOneof(message, oneof);
}
#pragma mark - DEVICEAPISDEVICEV1PostRelayOpenRequest

@implementation DEVICEAPISDEVICEV1PostRelayOpenRequest

@dynamic relayIndex;
@dynamic currentOpenTime;

typedef struct DEVICEAPISDEVICEV1PostRelayOpenRequest__storage_ {
  uint32_t _has_storage_[1];
  int32_t relayIndex;
  int32_t currentOpenTime;
} DEVICEAPISDEVICEV1PostRelayOpenRequest__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "relayIndex",
        .dataTypeSpecific.clazz = Nil,
        .number = DEVICEAPISDEVICEV1PostRelayOpenRequest_FieldNumber_RelayIndex,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(DEVICEAPISDEVICEV1PostRelayOpenRequest__storage_, relayIndex),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeInt32,
      },
      {
        .name = "currentOpenTime",
        .dataTypeSpecific.clazz = Nil,
        .number = DEVICEAPISDEVICEV1PostRelayOpenRequest_FieldNumber_CurrentOpenTime,
        .hasIndex = 1,
        .offset = (uint32_t)offsetof(DEVICEAPISDEVICEV1PostRelayOpenRequest__storage_, currentOpenTime),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeInt32,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(DEVICEAPISDEVICEV1PostRelayOpenRequest)
                                   messageName:@"PostRelayOpenRequest"
                               fileDescription:&DEVICEAPISDEVICEV1DeviceapisDeviceRelayV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(DEVICEAPISDEVICEV1PostRelayOpenRequest__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - DEVICEAPISDEVICEV1PostRelayOpenResponse

@implementation DEVICEAPISDEVICEV1PostRelayOpenResponse

@dynamic typeOneOfCase;
@dynamic error;

typedef struct DEVICEAPISDEVICEV1PostRelayOpenResponse__storage_ {
  uint32_t _has_storage_[2];
  DEVICEAPISDEVICEV1PostRelayOpenResponse_Error *error;
} DEVICEAPISDEVICEV1PostRelayOpenResponse__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "error",
        .dataTypeSpecific.clazz = GPBObjCClass(DEVICEAPISDEVICEV1PostRelayOpenResponse_Error),
        .number = DEVICEAPISDEVICEV1PostRelayOpenResponse_FieldNumber_Error,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(DEVICEAPISDEVICEV1PostRelayOpenResponse__storage_, error),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(DEVICEAPISDEVICEV1PostRelayOpenResponse)
                                   messageName:@"PostRelayOpenResponse"
                               fileDescription:&DEVICEAPISDEVICEV1DeviceapisDeviceRelayV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(DEVICEAPISDEVICEV1PostRelayOpenResponse__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    static const char *oneofs[] = {
      "type",
    };
    [localDescriptor setupOneofs:oneofs
                           count:(uint32_t)(sizeof(oneofs) / sizeof(char*))
                   firstHasIndex:-1];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

void DEVICEAPISDEVICEV1PostRelayOpenResponse_ClearTypeOneOfCase(DEVICEAPISDEVICEV1PostRelayOpenResponse *message) {
  GPBDescriptor *descriptor = [DEVICEAPISDEVICEV1PostRelayOpenResponse descriptor];
  GPBOneofDescriptor *oneof = [descriptor.oneofs objectAtIndex:0];
  GPBClearOneof(message, oneof);
}
#pragma mark - DEVICEAPISDEVICEV1PostRelayOpenResponse_Error

@implementation DEVICEAPISDEVICEV1PostRelayOpenResponse_Error

@dynamic reasonOneOfCase;
@dynamic validation;

typedef struct DEVICEAPISDEVICEV1PostRelayOpenResponse_Error__storage_ {
  uint32_t _has_storage_[2];
  DEVICEAPISDEVICEV1ValidationError *validation;
} DEVICEAPISDEVICEV1PostRelayOpenResponse_Error__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "validation",
        .dataTypeSpecific.clazz = GPBObjCClass(DEVICEAPISDEVICEV1ValidationError),
        .number = DEVICEAPISDEVICEV1PostRelayOpenResponse_Error_FieldNumber_Validation,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(DEVICEAPISDEVICEV1PostRelayOpenResponse_Error__storage_, validation),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(DEVICEAPISDEVICEV1PostRelayOpenResponse_Error)
                                   messageName:@"Error"
                               fileDescription:&DEVICEAPISDEVICEV1DeviceapisDeviceRelayV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(DEVICEAPISDEVICEV1PostRelayOpenResponse_Error__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    static const char *oneofs[] = {
      "reason",
    };
    [localDescriptor setupOneofs:oneofs
                           count:(uint32_t)(sizeof(oneofs) / sizeof(char*))
                   firstHasIndex:-1];
    [localDescriptor setupContainingMessageClass:GPBObjCClass(DEVICEAPISDEVICEV1PostRelayOpenResponse)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

void DEVICEAPISDEVICEV1PostRelayOpenResponse_Error_ClearReasonOneOfCase(DEVICEAPISDEVICEV1PostRelayOpenResponse_Error *message) {
  GPBDescriptor *descriptor = [DEVICEAPISDEVICEV1PostRelayOpenResponse_Error descriptor];
  GPBOneofDescriptor *oneof = [descriptor.oneofs objectAtIndex:0];
  GPBClearOneof(message, oneof);
}
#pragma mark - DEVICEAPISDEVICEV1EditRelayPropsOpenRequest

@implementation DEVICEAPISDEVICEV1EditRelayPropsOpenRequest

@dynamic hasData_p, data_p;
@dynamic hasUpdateMask, updateMask;

typedef struct DEVICEAPISDEVICEV1EditRelayPropsOpenRequest__storage_ {
  uint32_t _has_storage_[1];
  DEVICEAPISDEVICEV1RelayOpen *data_p;
  GPBFieldMask *updateMask;
} DEVICEAPISDEVICEV1EditRelayPropsOpenRequest__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "data_p",
        .dataTypeSpecific.clazz = GPBObjCClass(DEVICEAPISDEVICEV1RelayOpen),
        .number = DEVICEAPISDEVICEV1EditRelayPropsOpenRequest_FieldNumber_Data_p,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(DEVICEAPISDEVICEV1EditRelayPropsOpenRequest__storage_, data_p),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "updateMask",
        .dataTypeSpecific.clazz = GPBObjCClass(GPBFieldMask),
        .number = DEVICEAPISDEVICEV1EditRelayPropsOpenRequest_FieldNumber_UpdateMask,
        .hasIndex = 1,
        .offset = (uint32_t)offsetof(DEVICEAPISDEVICEV1EditRelayPropsOpenRequest__storage_, updateMask),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(DEVICEAPISDEVICEV1EditRelayPropsOpenRequest)
                                   messageName:@"EditRelayPropsOpenRequest"
                               fileDescription:&DEVICEAPISDEVICEV1DeviceapisDeviceRelayV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(DEVICEAPISDEVICEV1EditRelayPropsOpenRequest__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - DEVICEAPISDEVICEV1EditRelayPropsDtmfRequest

@implementation DEVICEAPISDEVICEV1EditRelayPropsDtmfRequest

@dynamic hasData_p, data_p;
@dynamic hasUpdateMask, updateMask;

typedef struct DEVICEAPISDEVICEV1EditRelayPropsDtmfRequest__storage_ {
  uint32_t _has_storage_[1];
  DEVICEAPISDEVICEV1RelayDtmf *data_p;
  GPBFieldMask *updateMask;
} DEVICEAPISDEVICEV1EditRelayPropsDtmfRequest__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "data_p",
        .dataTypeSpecific.clazz = GPBObjCClass(DEVICEAPISDEVICEV1RelayDtmf),
        .number = DEVICEAPISDEVICEV1EditRelayPropsDtmfRequest_FieldNumber_Data_p,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(DEVICEAPISDEVICEV1EditRelayPropsDtmfRequest__storage_, data_p),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "updateMask",
        .dataTypeSpecific.clazz = GPBObjCClass(GPBFieldMask),
        .number = DEVICEAPISDEVICEV1EditRelayPropsDtmfRequest_FieldNumber_UpdateMask,
        .hasIndex = 1,
        .offset = (uint32_t)offsetof(DEVICEAPISDEVICEV1EditRelayPropsDtmfRequest__storage_, updateMask),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(DEVICEAPISDEVICEV1EditRelayPropsDtmfRequest)
                                   messageName:@"EditRelayPropsDtmfRequest"
                               fileDescription:&DEVICEAPISDEVICEV1DeviceapisDeviceRelayV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(DEVICEAPISDEVICEV1EditRelayPropsDtmfRequest__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - DEVICEAPISDEVICEV1EditRelayPropsOpenResponse

@implementation DEVICEAPISDEVICEV1EditRelayPropsOpenResponse

@dynamic typeOneOfCase;
@dynamic error;

typedef struct DEVICEAPISDEVICEV1EditRelayPropsOpenResponse__storage_ {
  uint32_t _has_storage_[2];
  DEVICEAPISDEVICEV1EditRelayPropsOpenResponse_Error *error;
} DEVICEAPISDEVICEV1EditRelayPropsOpenResponse__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "error",
        .dataTypeSpecific.clazz = GPBObjCClass(DEVICEAPISDEVICEV1EditRelayPropsOpenResponse_Error),
        .number = DEVICEAPISDEVICEV1EditRelayPropsOpenResponse_FieldNumber_Error,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(DEVICEAPISDEVICEV1EditRelayPropsOpenResponse__storage_, error),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(DEVICEAPISDEVICEV1EditRelayPropsOpenResponse)
                                   messageName:@"EditRelayPropsOpenResponse"
                               fileDescription:&DEVICEAPISDEVICEV1DeviceapisDeviceRelayV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(DEVICEAPISDEVICEV1EditRelayPropsOpenResponse__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    static const char *oneofs[] = {
      "type",
    };
    [localDescriptor setupOneofs:oneofs
                           count:(uint32_t)(sizeof(oneofs) / sizeof(char*))
                   firstHasIndex:-1];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

void DEVICEAPISDEVICEV1EditRelayPropsOpenResponse_ClearTypeOneOfCase(DEVICEAPISDEVICEV1EditRelayPropsOpenResponse *message) {
  GPBDescriptor *descriptor = [DEVICEAPISDEVICEV1EditRelayPropsOpenResponse descriptor];
  GPBOneofDescriptor *oneof = [descriptor.oneofs objectAtIndex:0];
  GPBClearOneof(message, oneof);
}
#pragma mark - DEVICEAPISDEVICEV1EditRelayPropsOpenResponse_Error

@implementation DEVICEAPISDEVICEV1EditRelayPropsOpenResponse_Error

@dynamic reasonOneOfCase;
@dynamic validation;

typedef struct DEVICEAPISDEVICEV1EditRelayPropsOpenResponse_Error__storage_ {
  uint32_t _has_storage_[2];
  DEVICEAPISDEVICEV1ValidationError *validation;
} DEVICEAPISDEVICEV1EditRelayPropsOpenResponse_Error__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "validation",
        .dataTypeSpecific.clazz = GPBObjCClass(DEVICEAPISDEVICEV1ValidationError),
        .number = DEVICEAPISDEVICEV1EditRelayPropsOpenResponse_Error_FieldNumber_Validation,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(DEVICEAPISDEVICEV1EditRelayPropsOpenResponse_Error__storage_, validation),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(DEVICEAPISDEVICEV1EditRelayPropsOpenResponse_Error)
                                   messageName:@"Error"
                               fileDescription:&DEVICEAPISDEVICEV1DeviceapisDeviceRelayV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(DEVICEAPISDEVICEV1EditRelayPropsOpenResponse_Error__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    static const char *oneofs[] = {
      "reason",
    };
    [localDescriptor setupOneofs:oneofs
                           count:(uint32_t)(sizeof(oneofs) / sizeof(char*))
                   firstHasIndex:-1];
    [localDescriptor setupContainingMessageClass:GPBObjCClass(DEVICEAPISDEVICEV1EditRelayPropsOpenResponse)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

void DEVICEAPISDEVICEV1EditRelayPropsOpenResponse_Error_ClearReasonOneOfCase(DEVICEAPISDEVICEV1EditRelayPropsOpenResponse_Error *message) {
  GPBDescriptor *descriptor = [DEVICEAPISDEVICEV1EditRelayPropsOpenResponse_Error descriptor];
  GPBOneofDescriptor *oneof = [descriptor.oneofs objectAtIndex:0];
  GPBClearOneof(message, oneof);
}
#pragma mark - DEVICEAPISDEVICEV1EditRelayPropsDtmfResponse

@implementation DEVICEAPISDEVICEV1EditRelayPropsDtmfResponse

@dynamic typeOneOfCase;
@dynamic error;

typedef struct DEVICEAPISDEVICEV1EditRelayPropsDtmfResponse__storage_ {
  uint32_t _has_storage_[2];
  DEVICEAPISDEVICEV1EditRelayPropsDtmfResponse_Error *error;
} DEVICEAPISDEVICEV1EditRelayPropsDtmfResponse__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "error",
        .dataTypeSpecific.clazz = GPBObjCClass(DEVICEAPISDEVICEV1EditRelayPropsDtmfResponse_Error),
        .number = DEVICEAPISDEVICEV1EditRelayPropsDtmfResponse_FieldNumber_Error,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(DEVICEAPISDEVICEV1EditRelayPropsDtmfResponse__storage_, error),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(DEVICEAPISDEVICEV1EditRelayPropsDtmfResponse)
                                   messageName:@"EditRelayPropsDtmfResponse"
                               fileDescription:&DEVICEAPISDEVICEV1DeviceapisDeviceRelayV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(DEVICEAPISDEVICEV1EditRelayPropsDtmfResponse__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    static const char *oneofs[] = {
      "type",
    };
    [localDescriptor setupOneofs:oneofs
                           count:(uint32_t)(sizeof(oneofs) / sizeof(char*))
                   firstHasIndex:-1];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

void DEVICEAPISDEVICEV1EditRelayPropsDtmfResponse_ClearTypeOneOfCase(DEVICEAPISDEVICEV1EditRelayPropsDtmfResponse *message) {
  GPBDescriptor *descriptor = [DEVICEAPISDEVICEV1EditRelayPropsDtmfResponse descriptor];
  GPBOneofDescriptor *oneof = [descriptor.oneofs objectAtIndex:0];
  GPBClearOneof(message, oneof);
}
#pragma mark - DEVICEAPISDEVICEV1EditRelayPropsDtmfResponse_Error

@implementation DEVICEAPISDEVICEV1EditRelayPropsDtmfResponse_Error

@dynamic reasonOneOfCase;
@dynamic validation;

typedef struct DEVICEAPISDEVICEV1EditRelayPropsDtmfResponse_Error__storage_ {
  uint32_t _has_storage_[2];
  DEVICEAPISDEVICEV1ValidationError *validation;
} DEVICEAPISDEVICEV1EditRelayPropsDtmfResponse_Error__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "validation",
        .dataTypeSpecific.clazz = GPBObjCClass(DEVICEAPISDEVICEV1ValidationError),
        .number = DEVICEAPISDEVICEV1EditRelayPropsDtmfResponse_Error_FieldNumber_Validation,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(DEVICEAPISDEVICEV1EditRelayPropsDtmfResponse_Error__storage_, validation),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(DEVICEAPISDEVICEV1EditRelayPropsDtmfResponse_Error)
                                   messageName:@"Error"
                               fileDescription:&DEVICEAPISDEVICEV1DeviceapisDeviceRelayV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(DEVICEAPISDEVICEV1EditRelayPropsDtmfResponse_Error__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    static const char *oneofs[] = {
      "reason",
    };
    [localDescriptor setupOneofs:oneofs
                           count:(uint32_t)(sizeof(oneofs) / sizeof(char*))
                   firstHasIndex:-1];
    [localDescriptor setupContainingMessageClass:GPBObjCClass(DEVICEAPISDEVICEV1EditRelayPropsDtmfResponse)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

void DEVICEAPISDEVICEV1EditRelayPropsDtmfResponse_Error_ClearReasonOneOfCase(DEVICEAPISDEVICEV1EditRelayPropsDtmfResponse_Error *message) {
  GPBDescriptor *descriptor = [DEVICEAPISDEVICEV1EditRelayPropsDtmfResponse_Error descriptor];
  GPBOneofDescriptor *oneof = [descriptor.oneofs objectAtIndex:0];
  GPBClearOneof(message, oneof);
}
#pragma mark - DEVICEAPISDEVICEV1GetRelayStatusListRequest

@implementation DEVICEAPISDEVICEV1GetRelayStatusListRequest


typedef struct DEVICEAPISDEVICEV1GetRelayStatusListRequest__storage_ {
  uint32_t _has_storage_[1];
} DEVICEAPISDEVICEV1GetRelayStatusListRequest__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(DEVICEAPISDEVICEV1GetRelayStatusListRequest)
                                   messageName:@"GetRelayStatusListRequest"
                               fileDescription:&DEVICEAPISDEVICEV1DeviceapisDeviceRelayV1Root_FileDescription
                                        fields:NULL
                                    fieldCount:0
                                   storageSize:sizeof(DEVICEAPISDEVICEV1GetRelayStatusListRequest__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - DEVICEAPISDEVICEV1RelayState

@implementation DEVICEAPISDEVICEV1RelayState

@dynamic relayIndex;
@dynamic stateType;

typedef struct DEVICEAPISDEVICEV1RelayState__storage_ {
  uint32_t _has_storage_[1];
  int32_t relayIndex;
  DEVICEAPISDEVICEV1RelayState_StateType stateType;
} DEVICEAPISDEVICEV1RelayState__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "relayIndex",
        .dataTypeSpecific.clazz = Nil,
        .number = DEVICEAPISDEVICEV1RelayState_FieldNumber_RelayIndex,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(DEVICEAPISDEVICEV1RelayState__storage_, relayIndex),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeInt32,
      },
      {
        .name = "stateType",
        .dataTypeSpecific.enumDescFunc = DEVICEAPISDEVICEV1RelayState_StateType_EnumDescriptor,
        .number = DEVICEAPISDEVICEV1RelayState_FieldNumber_StateType,
        .hasIndex = 1,
        .offset = (uint32_t)offsetof(DEVICEAPISDEVICEV1RelayState__storage_, stateType),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldHasEnumDescriptor | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeEnum,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(DEVICEAPISDEVICEV1RelayState)
                                   messageName:@"RelayState"
                               fileDescription:&DEVICEAPISDEVICEV1DeviceapisDeviceRelayV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(DEVICEAPISDEVICEV1RelayState__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

int32_t DEVICEAPISDEVICEV1RelayState_StateType_RawValue(DEVICEAPISDEVICEV1RelayState *message) {
  GPBDescriptor *descriptor = [DEVICEAPISDEVICEV1RelayState descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:DEVICEAPISDEVICEV1RelayState_FieldNumber_StateType];
  return GPBGetMessageRawEnumField(message, field);
}

void SetDEVICEAPISDEVICEV1RelayState_StateType_RawValue(DEVICEAPISDEVICEV1RelayState *message, int32_t value) {
  GPBDescriptor *descriptor = [DEVICEAPISDEVICEV1RelayState descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:DEVICEAPISDEVICEV1RelayState_FieldNumber_StateType];
  GPBSetMessageRawEnumField(message, field, value);
}

#pragma mark - DEVICEAPISDEVICEV1GetRelayStatusListResponse

@implementation DEVICEAPISDEVICEV1GetRelayStatusListResponse

@dynamic dataArray, dataArray_Count;

typedef struct DEVICEAPISDEVICEV1GetRelayStatusListResponse__storage_ {
  uint32_t _has_storage_[1];
  NSMutableArray *dataArray;
} DEVICEAPISDEVICEV1GetRelayStatusListResponse__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "dataArray",
        .dataTypeSpecific.clazz = GPBObjCClass(DEVICEAPISDEVICEV1RelayState),
        .number = DEVICEAPISDEVICEV1GetRelayStatusListResponse_FieldNumber_DataArray,
        .hasIndex = GPBNoHasBit,
        .offset = (uint32_t)offsetof(DEVICEAPISDEVICEV1GetRelayStatusListResponse__storage_, dataArray),
        .flags = GPBFieldRepeated,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(DEVICEAPISDEVICEV1GetRelayStatusListResponse)
                                   messageName:@"GetRelayStatusListResponse"
                               fileDescription:&DEVICEAPISDEVICEV1DeviceapisDeviceRelayV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(DEVICEAPISDEVICEV1GetRelayStatusListResponse__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - DEVICEAPISDEVICEV1GetRelayOpenListRequest

@implementation DEVICEAPISDEVICEV1GetRelayOpenListRequest


typedef struct DEVICEAPISDEVICEV1GetRelayOpenListRequest__storage_ {
  uint32_t _has_storage_[1];
} DEVICEAPISDEVICEV1GetRelayOpenListRequest__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(DEVICEAPISDEVICEV1GetRelayOpenListRequest)
                                   messageName:@"GetRelayOpenListRequest"
                               fileDescription:&DEVICEAPISDEVICEV1DeviceapisDeviceRelayV1Root_FileDescription
                                        fields:NULL
                                    fieldCount:0
                                   storageSize:sizeof(DEVICEAPISDEVICEV1GetRelayOpenListRequest__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - DEVICEAPISDEVICEV1GetRelayDtmfListRequest

@implementation DEVICEAPISDEVICEV1GetRelayDtmfListRequest


typedef struct DEVICEAPISDEVICEV1GetRelayDtmfListRequest__storage_ {
  uint32_t _has_storage_[1];
} DEVICEAPISDEVICEV1GetRelayDtmfListRequest__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(DEVICEAPISDEVICEV1GetRelayDtmfListRequest)
                                   messageName:@"GetRelayDtmfListRequest"
                               fileDescription:&DEVICEAPISDEVICEV1DeviceapisDeviceRelayV1Root_FileDescription
                                        fields:NULL
                                    fieldCount:0
                                   storageSize:sizeof(DEVICEAPISDEVICEV1GetRelayDtmfListRequest__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - DEVICEAPISDEVICEV1RelayOpen

@implementation DEVICEAPISDEVICEV1RelayOpen

@dynamic relayIndex;
@dynamic lockType;
@dynamic openTimeGeneral;
@dynamic openTimeEmergency;

typedef struct DEVICEAPISDEVICEV1RelayOpen__storage_ {
  uint32_t _has_storage_[1];
  int32_t relayIndex;
  DEVICEAPISDEVICEV1RelayOpen_LockType lockType;
  int32_t openTimeGeneral;
  int32_t openTimeEmergency;
} DEVICEAPISDEVICEV1RelayOpen__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "relayIndex",
        .dataTypeSpecific.clazz = Nil,
        .number = DEVICEAPISDEVICEV1RelayOpen_FieldNumber_RelayIndex,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(DEVICEAPISDEVICEV1RelayOpen__storage_, relayIndex),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeInt32,
      },
      {
        .name = "lockType",
        .dataTypeSpecific.enumDescFunc = DEVICEAPISDEVICEV1RelayOpen_LockType_EnumDescriptor,
        .number = DEVICEAPISDEVICEV1RelayOpen_FieldNumber_LockType,
        .hasIndex = 1,
        .offset = (uint32_t)offsetof(DEVICEAPISDEVICEV1RelayOpen__storage_, lockType),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldHasEnumDescriptor | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeEnum,
      },
      {
        .name = "openTimeGeneral",
        .dataTypeSpecific.clazz = Nil,
        .number = DEVICEAPISDEVICEV1RelayOpen_FieldNumber_OpenTimeGeneral,
        .hasIndex = 2,
        .offset = (uint32_t)offsetof(DEVICEAPISDEVICEV1RelayOpen__storage_, openTimeGeneral),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeInt32,
      },
      {
        .name = "openTimeEmergency",
        .dataTypeSpecific.clazz = Nil,
        .number = DEVICEAPISDEVICEV1RelayOpen_FieldNumber_OpenTimeEmergency,
        .hasIndex = 3,
        .offset = (uint32_t)offsetof(DEVICEAPISDEVICEV1RelayOpen__storage_, openTimeEmergency),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeInt32,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(DEVICEAPISDEVICEV1RelayOpen)
                                   messageName:@"RelayOpen"
                               fileDescription:&DEVICEAPISDEVICEV1DeviceapisDeviceRelayV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(DEVICEAPISDEVICEV1RelayOpen__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

int32_t DEVICEAPISDEVICEV1RelayOpen_LockType_RawValue(DEVICEAPISDEVICEV1RelayOpen *message) {
  GPBDescriptor *descriptor = [DEVICEAPISDEVICEV1RelayOpen descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:DEVICEAPISDEVICEV1RelayOpen_FieldNumber_LockType];
  return GPBGetMessageRawEnumField(message, field);
}

void SetDEVICEAPISDEVICEV1RelayOpen_LockType_RawValue(DEVICEAPISDEVICEV1RelayOpen *message, int32_t value) {
  GPBDescriptor *descriptor = [DEVICEAPISDEVICEV1RelayOpen descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:DEVICEAPISDEVICEV1RelayOpen_FieldNumber_LockType];
  GPBSetMessageRawEnumField(message, field, value);
}

#pragma mark - DEVICEAPISDEVICEV1GetRelayOpenListResponse

@implementation DEVICEAPISDEVICEV1GetRelayOpenListResponse

@dynamic dataArray, dataArray_Count;

typedef struct DEVICEAPISDEVICEV1GetRelayOpenListResponse__storage_ {
  uint32_t _has_storage_[1];
  NSMutableArray *dataArray;
} DEVICEAPISDEVICEV1GetRelayOpenListResponse__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "dataArray",
        .dataTypeSpecific.clazz = GPBObjCClass(DEVICEAPISDEVICEV1RelayOpen),
        .number = DEVICEAPISDEVICEV1GetRelayOpenListResponse_FieldNumber_DataArray,
        .hasIndex = GPBNoHasBit,
        .offset = (uint32_t)offsetof(DEVICEAPISDEVICEV1GetRelayOpenListResponse__storage_, dataArray),
        .flags = GPBFieldRepeated,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(DEVICEAPISDEVICEV1GetRelayOpenListResponse)
                                   messageName:@"GetRelayOpenListResponse"
                               fileDescription:&DEVICEAPISDEVICEV1DeviceapisDeviceRelayV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(DEVICEAPISDEVICEV1GetRelayOpenListResponse__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - DEVICEAPISDEVICEV1RelayDtmf

@implementation DEVICEAPISDEVICEV1RelayDtmf

@dynamic relayIndex;
@dynamic dtmfCode;

typedef struct DEVICEAPISDEVICEV1RelayDtmf__storage_ {
  uint32_t _has_storage_[1];
  int32_t relayIndex;
  NSString *dtmfCode;
} DEVICEAPISDEVICEV1RelayDtmf__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "relayIndex",
        .dataTypeSpecific.clazz = Nil,
        .number = DEVICEAPISDEVICEV1RelayDtmf_FieldNumber_RelayIndex,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(DEVICEAPISDEVICEV1RelayDtmf__storage_, relayIndex),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeInt32,
      },
      {
        .name = "dtmfCode",
        .dataTypeSpecific.clazz = Nil,
        .number = DEVICEAPISDEVICEV1RelayDtmf_FieldNumber_DtmfCode,
        .hasIndex = 1,
        .offset = (uint32_t)offsetof(DEVICEAPISDEVICEV1RelayDtmf__storage_, dtmfCode),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeString,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(DEVICEAPISDEVICEV1RelayDtmf)
                                   messageName:@"RelayDtmf"
                               fileDescription:&DEVICEAPISDEVICEV1DeviceapisDeviceRelayV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(DEVICEAPISDEVICEV1RelayDtmf__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - DEVICEAPISDEVICEV1GetRelayDtmfListResponse

@implementation DEVICEAPISDEVICEV1GetRelayDtmfListResponse

@dynamic dataArray, dataArray_Count;

typedef struct DEVICEAPISDEVICEV1GetRelayDtmfListResponse__storage_ {
  uint32_t _has_storage_[1];
  NSMutableArray *dataArray;
} DEVICEAPISDEVICEV1GetRelayDtmfListResponse__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "dataArray",
        .dataTypeSpecific.clazz = GPBObjCClass(DEVICEAPISDEVICEV1RelayDtmf),
        .number = DEVICEAPISDEVICEV1GetRelayDtmfListResponse_FieldNumber_DataArray,
        .hasIndex = GPBNoHasBit,
        .offset = (uint32_t)offsetof(DEVICEAPISDEVICEV1GetRelayDtmfListResponse__storage_, dataArray),
        .flags = GPBFieldRepeated,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(DEVICEAPISDEVICEV1GetRelayDtmfListResponse)
                                   messageName:@"GetRelayDtmfListResponse"
                               fileDescription:&DEVICEAPISDEVICEV1DeviceapisDeviceRelayV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(DEVICEAPISDEVICEV1GetRelayDtmfListResponse__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end


#pragma clang diagnostic pop

// @@protoc_insertion_point(global_scope)

// clang-format on
