// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: flutterblue.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

#import <stdatomic.h>

#import "Flutterblue.pbobjc.h"
// @@protoc_insertion_point(imports)

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"

#pragma mark - ProtosFlutterblueRoot

@implementation ProtosFlutterblueRoot

// No extensions in the file and no imports, so no need to generate
// +extensionRegistry.

@end

#pragma mark - ProtosFlutterblueRoot_FileDescriptor

static GPBFileDescriptor *ProtosFlutterblueRoot_FileDescriptor(void) {
  // This is called by +initialize so there is no need to worry
  // about thread safety of the singleton.
  static GPBFileDescriptor *descriptor = NULL;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    descriptor = [[GPBFileDescriptor alloc] initWithPackage:@""
                                                 objcPrefix:@"Protos"
                                                     syntax:GPBFileSyntaxProto3];
  }
  return descriptor;
}

#pragma mark - ProtosInt32Value

@implementation ProtosInt32Value

@dynamic value;

typedef struct ProtosInt32Value__storage_ {
  uint32_t _has_storage_[1];
  int32_t value;
} ProtosInt32Value__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "value",
        .dataTypeSpecific.className = NULL,
        .number = ProtosInt32Value_FieldNumber_Value,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(ProtosInt32Value__storage_, value),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeInt32,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:[ProtosInt32Value class]
                                     rootClass:[ProtosFlutterblueRoot class]
                                          file:ProtosFlutterblueRoot_FileDescriptor()
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(ProtosInt32Value__storage_)
                                         flags:GPBDescriptorInitializationFlag_None];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - ProtosBluetoothState

@implementation ProtosBluetoothState

@dynamic state;

typedef struct ProtosBluetoothState__storage_ {
  uint32_t _has_storage_[1];
  ProtosBluetoothState_State state;
} ProtosBluetoothState__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "state",
        .dataTypeSpecific.enumDescFunc = ProtosBluetoothState_State_EnumDescriptor,
        .number = ProtosBluetoothState_FieldNumber_State,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(ProtosBluetoothState__storage_, state),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldHasEnumDescriptor),
        .dataType = GPBDataTypeEnum,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:[ProtosBluetoothState class]
                                     rootClass:[ProtosFlutterblueRoot class]
                                          file:ProtosFlutterblueRoot_FileDescriptor()
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(ProtosBluetoothState__storage_)
                                         flags:GPBDescriptorInitializationFlag_None];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

int32_t ProtosBluetoothState_State_RawValue(ProtosBluetoothState *message) {
  GPBDescriptor *descriptor = [ProtosBluetoothState descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:ProtosBluetoothState_FieldNumber_State];
  return GPBGetMessageInt32Field(message, field);
}

void SetProtosBluetoothState_State_RawValue(ProtosBluetoothState *message, int32_t value) {
  GPBDescriptor *descriptor = [ProtosBluetoothState descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:ProtosBluetoothState_FieldNumber_State];
  GPBSetInt32IvarWithFieldInternal(message, field, value, descriptor.file.syntax);
}

#pragma mark - Enum ProtosBluetoothState_State

GPBEnumDescriptor *ProtosBluetoothState_State_EnumDescriptor(void) {
  static _Atomic(GPBEnumDescriptor*) descriptor = nil;
  if (!descriptor) {
    static const char *valueNames =
        "Unknown\000Unavailable\000Unauthorized\000Turning"
        "On\000On\000TurningOff\000Off\000";
    static const int32_t values[] = {
        ProtosBluetoothState_State_Unknown,
        ProtosBluetoothState_State_Unavailable,
        ProtosBluetoothState_State_Unauthorized,
        ProtosBluetoothState_State_TurningOn,
        ProtosBluetoothState_State_On,
        ProtosBluetoothState_State_TurningOff,
        ProtosBluetoothState_State_Off,
    };
    GPBEnumDescriptor *worker =
        [GPBEnumDescriptor allocDescriptorForName:GPBNSStringifySymbol(ProtosBluetoothState_State)
                                       valueNames:valueNames
                                           values:values
                                            count:(uint32_t)(sizeof(values) / sizeof(int32_t))
                                     enumVerifier:ProtosBluetoothState_State_IsValidValue];
    GPBEnumDescriptor *expected = nil;
    if (!atomic_compare_exchange_strong(&descriptor, &expected, worker)) {
      [worker release];
    }
  }
  return descriptor;
}

BOOL ProtosBluetoothState_State_IsValidValue(int32_t value__) {
  switch (value__) {
    case ProtosBluetoothState_State_Unknown:
    case ProtosBluetoothState_State_Unavailable:
    case ProtosBluetoothState_State_Unauthorized:
    case ProtosBluetoothState_State_TurningOn:
    case ProtosBluetoothState_State_On:
    case ProtosBluetoothState_State_TurningOff:
    case ProtosBluetoothState_State_Off:
      return YES;
    default:
      return NO;
  }
}

#pragma mark - ProtosAdvertisementData

@implementation ProtosAdvertisementData

@dynamic localName;
@dynamic hasTxPowerLevel, txPowerLevel;
@dynamic connectable;
@dynamic manufacturerData, manufacturerData_Count;
@dynamic serviceData, serviceData_Count;
@dynamic serviceUuidsArray, serviceUuidsArray_Count;

typedef struct ProtosAdvertisementData__storage_ {
  uint32_t _has_storage_[1];
  NSString *localName;
  ProtosInt32Value *txPowerLevel;
  GPBInt32ObjectDictionary *manufacturerData;
  NSMutableDictionary *serviceData;
  NSMutableArray *serviceUuidsArray;
} ProtosAdvertisementData__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "localName",
        .dataTypeSpecific.className = NULL,
        .number = ProtosAdvertisementData_FieldNumber_LocalName,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(ProtosAdvertisementData__storage_, localName),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeString,
      },
      {
        .name = "txPowerLevel",
        .dataTypeSpecific.className = GPBStringifySymbol(ProtosInt32Value),
        .number = ProtosAdvertisementData_FieldNumber_TxPowerLevel,
        .hasIndex = 1,
        .offset = (uint32_t)offsetof(ProtosAdvertisementData__storage_, txPowerLevel),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "connectable",
        .dataTypeSpecific.className = NULL,
        .number = ProtosAdvertisementData_FieldNumber_Connectable,
        .hasIndex = 2,
        .offset = 3,  // Stored in _has_storage_ to save space.
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeBool,
      },
      {
        .name = "manufacturerData",
        .dataTypeSpecific.className = NULL,
        .number = ProtosAdvertisementData_FieldNumber_ManufacturerData,
        .hasIndex = GPBNoHasBit,
        .offset = (uint32_t)offsetof(ProtosAdvertisementData__storage_, manufacturerData),
        .flags = GPBFieldMapKeyInt32,
        .dataType = GPBDataTypeBytes,
      },
      {
        .name = "serviceData",
        .dataTypeSpecific.className = NULL,
        .number = ProtosAdvertisementData_FieldNumber_ServiceData,
        .hasIndex = GPBNoHasBit,
        .offset = (uint32_t)offsetof(ProtosAdvertisementData__storage_, serviceData),
        .flags = GPBFieldMapKeyString,
        .dataType = GPBDataTypeBytes,
      },
      {
        .name = "serviceUuidsArray",
        .dataTypeSpecific.className = NULL,
        .number = ProtosAdvertisementData_FieldNumber_ServiceUuidsArray,
        .hasIndex = GPBNoHasBit,
        .offset = (uint32_t)offsetof(ProtosAdvertisementData__storage_, serviceUuidsArray),
        .flags = GPBFieldRepeated,
        .dataType = GPBDataTypeString,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:[ProtosAdvertisementData class]
                                     rootClass:[ProtosFlutterblueRoot class]
                                          file:ProtosFlutterblueRoot_FileDescriptor()
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(ProtosAdvertisementData__storage_)
                                         flags:GPBDescriptorInitializationFlag_None];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - ProtosScanSettings

@implementation ProtosScanSettings

@dynamic androidScanMode;
@dynamic serviceUuidsArray, serviceUuidsArray_Count;

typedef struct ProtosScanSettings__storage_ {
  uint32_t _has_storage_[1];
  int32_t androidScanMode;
  NSMutableArray *serviceUuidsArray;
} ProtosScanSettings__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "androidScanMode",
        .dataTypeSpecific.className = NULL,
        .number = ProtosScanSettings_FieldNumber_AndroidScanMode,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(ProtosScanSettings__storage_, androidScanMode),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeInt32,
      },
      {
        .name = "serviceUuidsArray",
        .dataTypeSpecific.className = NULL,
        .number = ProtosScanSettings_FieldNumber_ServiceUuidsArray,
        .hasIndex = GPBNoHasBit,
        .offset = (uint32_t)offsetof(ProtosScanSettings__storage_, serviceUuidsArray),
        .flags = GPBFieldRepeated,
        .dataType = GPBDataTypeString,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:[ProtosScanSettings class]
                                     rootClass:[ProtosFlutterblueRoot class]
                                          file:ProtosFlutterblueRoot_FileDescriptor()
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(ProtosScanSettings__storage_)
                                         flags:GPBDescriptorInitializationFlag_None];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - ProtosScanResult

@implementation ProtosScanResult

@dynamic hasDevice, device;
@dynamic hasAdvertisementData, advertisementData;
@dynamic rssi;

typedef struct ProtosScanResult__storage_ {
  uint32_t _has_storage_[1];
  int32_t rssi;
  ProtosBluetoothDevice *device;
  ProtosAdvertisementData *advertisementData;
} ProtosScanResult__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "device",
        .dataTypeSpecific.className = GPBStringifySymbol(ProtosBluetoothDevice),
        .number = ProtosScanResult_FieldNumber_Device,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(ProtosScanResult__storage_, device),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "advertisementData",
        .dataTypeSpecific.className = GPBStringifySymbol(ProtosAdvertisementData),
        .number = ProtosScanResult_FieldNumber_AdvertisementData,
        .hasIndex = 1,
        .offset = (uint32_t)offsetof(ProtosScanResult__storage_, advertisementData),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "rssi",
        .dataTypeSpecific.className = NULL,
        .number = ProtosScanResult_FieldNumber_Rssi,
        .hasIndex = 2,
        .offset = (uint32_t)offsetof(ProtosScanResult__storage_, rssi),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeInt32,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:[ProtosScanResult class]
                                     rootClass:[ProtosFlutterblueRoot class]
                                          file:ProtosFlutterblueRoot_FileDescriptor()
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(ProtosScanResult__storage_)
                                         flags:GPBDescriptorInitializationFlag_None];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - ProtosConnectRequest

@implementation ProtosConnectRequest

@dynamic remoteId;
@dynamic androidAutoConnect;

typedef struct ProtosConnectRequest__storage_ {
  uint32_t _has_storage_[1];
  NSString *remoteId;
} ProtosConnectRequest__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "remoteId",
        .dataTypeSpecific.className = NULL,
        .number = ProtosConnectRequest_FieldNumber_RemoteId,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(ProtosConnectRequest__storage_, remoteId),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeString,
      },
      {
        .name = "androidAutoConnect",
        .dataTypeSpecific.className = NULL,
        .number = ProtosConnectRequest_FieldNumber_AndroidAutoConnect,
        .hasIndex = 1,
        .offset = 2,  // Stored in _has_storage_ to save space.
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeBool,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:[ProtosConnectRequest class]
                                     rootClass:[ProtosFlutterblueRoot class]
                                          file:ProtosFlutterblueRoot_FileDescriptor()
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(ProtosConnectRequest__storage_)
                                         flags:GPBDescriptorInitializationFlag_None];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - ProtosBluetoothDevice

@implementation ProtosBluetoothDevice

@dynamic remoteId;
@dynamic name;
@dynamic type;

typedef struct ProtosBluetoothDevice__storage_ {
  uint32_t _has_storage_[1];
  ProtosBluetoothDevice_Type type;
  NSString *remoteId;
  NSString *name;
} ProtosBluetoothDevice__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "remoteId",
        .dataTypeSpecific.className = NULL,
        .number = ProtosBluetoothDevice_FieldNumber_RemoteId,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(ProtosBluetoothDevice__storage_, remoteId),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeString,
      },
      {
        .name = "name",
        .dataTypeSpecific.className = NULL,
        .number = ProtosBluetoothDevice_FieldNumber_Name,
        .hasIndex = 1,
        .offset = (uint32_t)offsetof(ProtosBluetoothDevice__storage_, name),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeString,
      },
      {
        .name = "type",
        .dataTypeSpecific.enumDescFunc = ProtosBluetoothDevice_Type_EnumDescriptor,
        .number = ProtosBluetoothDevice_FieldNumber_Type,
        .hasIndex = 2,
        .offset = (uint32_t)offsetof(ProtosBluetoothDevice__storage_, type),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldHasEnumDescriptor),
        .dataType = GPBDataTypeEnum,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:[ProtosBluetoothDevice class]
                                     rootClass:[ProtosFlutterblueRoot class]
                                          file:ProtosFlutterblueRoot_FileDescriptor()
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(ProtosBluetoothDevice__storage_)
                                         flags:GPBDescriptorInitializationFlag_None];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

int32_t ProtosBluetoothDevice_Type_RawValue(ProtosBluetoothDevice *message) {
  GPBDescriptor *descriptor = [ProtosBluetoothDevice descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:ProtosBluetoothDevice_FieldNumber_Type];
  return GPBGetMessageInt32Field(message, field);
}

void SetProtosBluetoothDevice_Type_RawValue(ProtosBluetoothDevice *message, int32_t value) {
  GPBDescriptor *descriptor = [ProtosBluetoothDevice descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:ProtosBluetoothDevice_FieldNumber_Type];
  GPBSetInt32IvarWithFieldInternal(message, field, value, descriptor.file.syntax);
}

#pragma mark - Enum ProtosBluetoothDevice_Type

GPBEnumDescriptor *ProtosBluetoothDevice_Type_EnumDescriptor(void) {
  static _Atomic(GPBEnumDescriptor*) descriptor = nil;
  if (!descriptor) {
    static const char *valueNames =
        "Unknown\000Classic\000Le\000Dual\000";
    static const int32_t values[] = {
        ProtosBluetoothDevice_Type_Unknown,
        ProtosBluetoothDevice_Type_Classic,
        ProtosBluetoothDevice_Type_Le,
        ProtosBluetoothDevice_Type_Dual,
    };
    GPBEnumDescriptor *worker =
        [GPBEnumDescriptor allocDescriptorForName:GPBNSStringifySymbol(ProtosBluetoothDevice_Type)
                                       valueNames:valueNames
                                           values:values
                                            count:(uint32_t)(sizeof(values) / sizeof(int32_t))
                                     enumVerifier:ProtosBluetoothDevice_Type_IsValidValue];
    GPBEnumDescriptor *expected = nil;
    if (!atomic_compare_exchange_strong(&descriptor, &expected, worker)) {
      [worker release];
    }
  }
  return descriptor;
}

BOOL ProtosBluetoothDevice_Type_IsValidValue(int32_t value__) {
  switch (value__) {
    case ProtosBluetoothDevice_Type_Unknown:
    case ProtosBluetoothDevice_Type_Classic:
    case ProtosBluetoothDevice_Type_Le:
    case ProtosBluetoothDevice_Type_Dual:
      return YES;
    default:
      return NO;
  }
}

#pragma mark - ProtosBluetoothService

@implementation ProtosBluetoothService

@dynamic uuid;
@dynamic remoteId;
@dynamic isPrimary;
@dynamic characteristicsArray, characteristicsArray_Count;
@dynamic includedServicesArray, includedServicesArray_Count;

typedef struct ProtosBluetoothService__storage_ {
  uint32_t _has_storage_[1];
  NSString *uuid;
  NSString *remoteId;
  NSMutableArray *characteristicsArray;
  NSMutableArray *includedServicesArray;
} ProtosBluetoothService__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "uuid",
        .dataTypeSpecific.className = NULL,
        .number = ProtosBluetoothService_FieldNumber_Uuid,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(ProtosBluetoothService__storage_, uuid),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeString,
      },
      {
        .name = "remoteId",
        .dataTypeSpecific.className = NULL,
        .number = ProtosBluetoothService_FieldNumber_RemoteId,
        .hasIndex = 1,
        .offset = (uint32_t)offsetof(ProtosBluetoothService__storage_, remoteId),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeString,
      },
      {
        .name = "isPrimary",
        .dataTypeSpecific.className = NULL,
        .number = ProtosBluetoothService_FieldNumber_IsPrimary,
        .hasIndex = 2,
        .offset = 3,  // Stored in _has_storage_ to save space.
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeBool,
      },
      {
        .name = "characteristicsArray",
        .dataTypeSpecific.className = GPBStringifySymbol(ProtosBluetoothCharacteristic),
        .number = ProtosBluetoothService_FieldNumber_CharacteristicsArray,
        .hasIndex = GPBNoHasBit,
        .offset = (uint32_t)offsetof(ProtosBluetoothService__storage_, characteristicsArray),
        .flags = GPBFieldRepeated,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "includedServicesArray",
        .dataTypeSpecific.className = GPBStringifySymbol(ProtosBluetoothService),
        .number = ProtosBluetoothService_FieldNumber_IncludedServicesArray,
        .hasIndex = GPBNoHasBit,
        .offset = (uint32_t)offsetof(ProtosBluetoothService__storage_, includedServicesArray),
        .flags = GPBFieldRepeated,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:[ProtosBluetoothService class]
                                     rootClass:[ProtosFlutterblueRoot class]
                                          file:ProtosFlutterblueRoot_FileDescriptor()
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(ProtosBluetoothService__storage_)
                                         flags:GPBDescriptorInitializationFlag_None];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - ProtosBluetoothCharacteristic

@implementation ProtosBluetoothCharacteristic

@dynamic uuid;
@dynamic serviceUuid;
@dynamic secondaryServiceUuid;
@dynamic descriptorsArray, descriptorsArray_Count;
@dynamic hasProperties, properties;
@dynamic value;

typedef struct ProtosBluetoothCharacteristic__storage_ {
  uint32_t _has_storage_[1];
  NSString *uuid;
  NSString *serviceUuid;
  NSString *secondaryServiceUuid;
  NSMutableArray *descriptorsArray;
  ProtosCharacteristicProperties *properties;
  NSData *value;
} ProtosBluetoothCharacteristic__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "uuid",
        .dataTypeSpecific.className = NULL,
        .number = ProtosBluetoothCharacteristic_FieldNumber_Uuid,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(ProtosBluetoothCharacteristic__storage_, uuid),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeString,
      },
      {
        .name = "serviceUuid",
        .dataTypeSpecific.className = NULL,
        .number = ProtosBluetoothCharacteristic_FieldNumber_ServiceUuid,
        .hasIndex = 1,
        .offset = (uint32_t)offsetof(ProtosBluetoothCharacteristic__storage_, serviceUuid),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldTextFormatNameCustom),
        .dataType = GPBDataTypeString,
      },
      {
        .name = "secondaryServiceUuid",
        .dataTypeSpecific.className = NULL,
        .number = ProtosBluetoothCharacteristic_FieldNumber_SecondaryServiceUuid,
        .hasIndex = 2,
        .offset = (uint32_t)offsetof(ProtosBluetoothCharacteristic__storage_, secondaryServiceUuid),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldTextFormatNameCustom),
        .dataType = GPBDataTypeString,
      },
      {
        .name = "descriptorsArray",
        .dataTypeSpecific.className = GPBStringifySymbol(ProtosBluetoothDescriptor),
        .number = ProtosBluetoothCharacteristic_FieldNumber_DescriptorsArray,
        .hasIndex = GPBNoHasBit,
        .offset = (uint32_t)offsetof(ProtosBluetoothCharacteristic__storage_, descriptorsArray),
        .flags = GPBFieldRepeated,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "properties",
        .dataTypeSpecific.className = GPBStringifySymbol(ProtosCharacteristicProperties),
        .number = ProtosBluetoothCharacteristic_FieldNumber_Properties,
        .hasIndex = 3,
        .offset = (uint32_t)offsetof(ProtosBluetoothCharacteristic__storage_, properties),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "value",
        .dataTypeSpecific.className = NULL,
        .number = ProtosBluetoothCharacteristic_FieldNumber_Value,
        .hasIndex = 4,
        .offset = (uint32_t)offsetof(ProtosBluetoothCharacteristic__storage_, value),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeBytes,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:[ProtosBluetoothCharacteristic class]
                                     rootClass:[ProtosFlutterblueRoot class]
                                          file:ProtosFlutterblueRoot_FileDescriptor()
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(ProtosBluetoothCharacteristic__storage_)
                                         flags:GPBDescriptorInitializationFlag_None];
#if !GPBOBJC_SKIP_MESSAGE_TEXTFORMAT_EXTRAS
    static const char *extraTextFormatInfo =
        "\002\002\013\000\003\024\000";
    [localDescriptor setupExtraTextInfo:extraTextFormatInfo];
#endif  // !GPBOBJC_SKIP_MESSAGE_TEXTFORMAT_EXTRAS
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - ProtosBluetoothDescriptor

@implementation ProtosBluetoothDescriptor

@dynamic uuid;
@dynamic serviceUuid;
@dynamic characteristicUuid;
@dynamic value;

typedef struct ProtosBluetoothDescriptor__storage_ {
  uint32_t _has_storage_[1];
  NSString *uuid;
  NSString *serviceUuid;
  NSString *characteristicUuid;
  NSData *value;
} ProtosBluetoothDescriptor__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "uuid",
        .dataTypeSpecific.className = NULL,
        .number = ProtosBluetoothDescriptor_FieldNumber_Uuid,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(ProtosBluetoothDescriptor__storage_, uuid),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeString,
      },
      {
        .name = "serviceUuid",
        .dataTypeSpecific.className = NULL,
        .number = ProtosBluetoothDescriptor_FieldNumber_ServiceUuid,
        .hasIndex = 1,
        .offset = (uint32_t)offsetof(ProtosBluetoothDescriptor__storage_, serviceUuid),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldTextFormatNameCustom),
        .dataType = GPBDataTypeString,
      },
      {
        .name = "characteristicUuid",
        .dataTypeSpecific.className = NULL,
        .number = ProtosBluetoothDescriptor_FieldNumber_CharacteristicUuid,
        .hasIndex = 2,
        .offset = (uint32_t)offsetof(ProtosBluetoothDescriptor__storage_, characteristicUuid),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldTextFormatNameCustom),
        .dataType = GPBDataTypeString,
      },
      {
        .name = "value",
        .dataTypeSpecific.className = NULL,
        .number = ProtosBluetoothDescriptor_FieldNumber_Value,
        .hasIndex = 3,
        .offset = (uint32_t)offsetof(ProtosBluetoothDescriptor__storage_, value),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeBytes,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:[ProtosBluetoothDescriptor class]
                                     rootClass:[ProtosFlutterblueRoot class]
                                          file:ProtosFlutterblueRoot_FileDescriptor()
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(ProtosBluetoothDescriptor__storage_)
                                         flags:GPBDescriptorInitializationFlag_None];
#if !GPBOBJC_SKIP_MESSAGE_TEXTFORMAT_EXTRAS
    static const char *extraTextFormatInfo =
        "\002\002\013\000\003\022\000";
    [localDescriptor setupExtraTextInfo:extraTextFormatInfo];
#endif  // !GPBOBJC_SKIP_MESSAGE_TEXTFORMAT_EXTRAS
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - ProtosCharacteristicProperties

@implementation ProtosCharacteristicProperties

@dynamic broadcast;
@dynamic read;
@dynamic writeWithoutResponse;
@dynamic write;
@dynamic notify;
@dynamic indicate;
@dynamic authenticatedSignedWrites;
@dynamic extendedProperties;
@dynamic notifyEncryptionRequired;
@dynamic indicateEncryptionRequired;

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

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "broadcast",
        .dataTypeSpecific.className = NULL,
        .number = ProtosCharacteristicProperties_FieldNumber_Broadcast,
        .hasIndex = 0,
        .offset = 1,  // Stored in _has_storage_ to save space.
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeBool,
      },
      {
        .name = "read",
        .dataTypeSpecific.className = NULL,
        .number = ProtosCharacteristicProperties_FieldNumber_Read,
        .hasIndex = 2,
        .offset = 3,  // Stored in _has_storage_ to save space.
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeBool,
      },
      {
        .name = "writeWithoutResponse",
        .dataTypeSpecific.className = NULL,
        .number = ProtosCharacteristicProperties_FieldNumber_WriteWithoutResponse,
        .hasIndex = 4,
        .offset = 5,  // Stored in _has_storage_ to save space.
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeBool,
      },
      {
        .name = "write",
        .dataTypeSpecific.className = NULL,
        .number = ProtosCharacteristicProperties_FieldNumber_Write,
        .hasIndex = 6,
        .offset = 7,  // Stored in _has_storage_ to save space.
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeBool,
      },
      {
        .name = "notify",
        .dataTypeSpecific.className = NULL,
        .number = ProtosCharacteristicProperties_FieldNumber_Notify,
        .hasIndex = 8,
        .offset = 9,  // Stored in _has_storage_ to save space.
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeBool,
      },
      {
        .name = "indicate",
        .dataTypeSpecific.className = NULL,
        .number = ProtosCharacteristicProperties_FieldNumber_Indicate,
        .hasIndex = 10,
        .offset = 11,  // Stored in _has_storage_ to save space.
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeBool,
      },
      {
        .name = "authenticatedSignedWrites",
        .dataTypeSpecific.className = NULL,
        .number = ProtosCharacteristicProperties_FieldNumber_AuthenticatedSignedWrites,
        .hasIndex = 12,
        .offset = 13,  // Stored in _has_storage_ to save space.
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeBool,
      },
      {
        .name = "extendedProperties",
        .dataTypeSpecific.className = NULL,
        .number = ProtosCharacteristicProperties_FieldNumber_ExtendedProperties,
        .hasIndex = 14,
        .offset = 15,  // Stored in _has_storage_ to save space.
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeBool,
      },
      {
        .name = "notifyEncryptionRequired",
        .dataTypeSpecific.className = NULL,
        .number = ProtosCharacteristicProperties_FieldNumber_NotifyEncryptionRequired,
        .hasIndex = 16,
        .offset = 17,  // Stored in _has_storage_ to save space.
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeBool,
      },
      {
        .name = "indicateEncryptionRequired",
        .dataTypeSpecific.className = NULL,
        .number = ProtosCharacteristicProperties_FieldNumber_IndicateEncryptionRequired,
        .hasIndex = 18,
        .offset = 19,  // Stored in _has_storage_ to save space.
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeBool,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:[ProtosCharacteristicProperties class]
                                     rootClass:[ProtosFlutterblueRoot class]
                                          file:ProtosFlutterblueRoot_FileDescriptor()
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(ProtosCharacteristicProperties__storage_)
                                         flags:GPBDescriptorInitializationFlag_None];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - ProtosDiscoverServicesResult

@implementation ProtosDiscoverServicesResult

@dynamic remoteId;
@dynamic servicesArray, servicesArray_Count;

typedef struct ProtosDiscoverServicesResult__storage_ {
  uint32_t _has_storage_[1];
  NSString *remoteId;
  NSMutableArray *servicesArray;
} ProtosDiscoverServicesResult__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "remoteId",
        .dataTypeSpecific.className = NULL,
        .number = ProtosDiscoverServicesResult_FieldNumber_RemoteId,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(ProtosDiscoverServicesResult__storage_, remoteId),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeString,
      },
      {
        .name = "servicesArray",
        .dataTypeSpecific.className = GPBStringifySymbol(ProtosBluetoothService),
        .number = ProtosDiscoverServicesResult_FieldNumber_ServicesArray,
        .hasIndex = GPBNoHasBit,
        .offset = (uint32_t)offsetof(ProtosDiscoverServicesResult__storage_, servicesArray),
        .flags = GPBFieldRepeated,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:[ProtosDiscoverServicesResult class]
                                     rootClass:[ProtosFlutterblueRoot class]
                                          file:ProtosFlutterblueRoot_FileDescriptor()
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(ProtosDiscoverServicesResult__storage_)
                                         flags:GPBDescriptorInitializationFlag_None];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - ProtosReadCharacteristicRequest

@implementation ProtosReadCharacteristicRequest

@dynamic remoteId;
@dynamic characteristicUuid;
@dynamic serviceUuid;
@dynamic secondaryServiceUuid;

typedef struct ProtosReadCharacteristicRequest__storage_ {
  uint32_t _has_storage_[1];
  NSString *remoteId;
  NSString *characteristicUuid;
  NSString *serviceUuid;
  NSString *secondaryServiceUuid;
} ProtosReadCharacteristicRequest__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "remoteId",
        .dataTypeSpecific.className = NULL,
        .number = ProtosReadCharacteristicRequest_FieldNumber_RemoteId,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(ProtosReadCharacteristicRequest__storage_, remoteId),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeString,
      },
      {
        .name = "characteristicUuid",
        .dataTypeSpecific.className = NULL,
        .number = ProtosReadCharacteristicRequest_FieldNumber_CharacteristicUuid,
        .hasIndex = 1,
        .offset = (uint32_t)offsetof(ProtosReadCharacteristicRequest__storage_, characteristicUuid),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeString,
      },
      {
        .name = "serviceUuid",
        .dataTypeSpecific.className = NULL,
        .number = ProtosReadCharacteristicRequest_FieldNumber_ServiceUuid,
        .hasIndex = 2,
        .offset = (uint32_t)offsetof(ProtosReadCharacteristicRequest__storage_, serviceUuid),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeString,
      },
      {
        .name = "secondaryServiceUuid",
        .dataTypeSpecific.className = NULL,
        .number = ProtosReadCharacteristicRequest_FieldNumber_SecondaryServiceUuid,
        .hasIndex = 3,
        .offset = (uint32_t)offsetof(ProtosReadCharacteristicRequest__storage_, secondaryServiceUuid),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeString,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:[ProtosReadCharacteristicRequest class]
                                     rootClass:[ProtosFlutterblueRoot class]
                                          file:ProtosFlutterblueRoot_FileDescriptor()
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(ProtosReadCharacteristicRequest__storage_)
                                         flags:GPBDescriptorInitializationFlag_None];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - ProtosReadCharacteristicResponse

@implementation ProtosReadCharacteristicResponse

@dynamic remoteId;
@dynamic hasCharacteristic, characteristic;

typedef struct ProtosReadCharacteristicResponse__storage_ {
  uint32_t _has_storage_[1];
  NSString *remoteId;
  ProtosBluetoothCharacteristic *characteristic;
} ProtosReadCharacteristicResponse__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "remoteId",
        .dataTypeSpecific.className = NULL,
        .number = ProtosReadCharacteristicResponse_FieldNumber_RemoteId,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(ProtosReadCharacteristicResponse__storage_, remoteId),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeString,
      },
      {
        .name = "characteristic",
        .dataTypeSpecific.className = GPBStringifySymbol(ProtosBluetoothCharacteristic),
        .number = ProtosReadCharacteristicResponse_FieldNumber_Characteristic,
        .hasIndex = 1,
        .offset = (uint32_t)offsetof(ProtosReadCharacteristicResponse__storage_, characteristic),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:[ProtosReadCharacteristicResponse class]
                                     rootClass:[ProtosFlutterblueRoot class]
                                          file:ProtosFlutterblueRoot_FileDescriptor()
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(ProtosReadCharacteristicResponse__storage_)
                                         flags:GPBDescriptorInitializationFlag_None];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - ProtosReadDescriptorRequest

@implementation ProtosReadDescriptorRequest

@dynamic remoteId;
@dynamic descriptorUuid;
@dynamic serviceUuid;
@dynamic secondaryServiceUuid;
@dynamic characteristicUuid;

typedef struct ProtosReadDescriptorRequest__storage_ {
  uint32_t _has_storage_[1];
  NSString *remoteId;
  NSString *descriptorUuid;
  NSString *serviceUuid;
  NSString *secondaryServiceUuid;
  NSString *characteristicUuid;
} ProtosReadDescriptorRequest__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "remoteId",
        .dataTypeSpecific.className = NULL,
        .number = ProtosReadDescriptorRequest_FieldNumber_RemoteId,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(ProtosReadDescriptorRequest__storage_, remoteId),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeString,
      },
      {
        .name = "descriptorUuid",
        .dataTypeSpecific.className = NULL,
        .number = ProtosReadDescriptorRequest_FieldNumber_DescriptorUuid,
        .hasIndex = 1,
        .offset = (uint32_t)offsetof(ProtosReadDescriptorRequest__storage_, descriptorUuid),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeString,
      },
      {
        .name = "serviceUuid",
        .dataTypeSpecific.className = NULL,
        .number = ProtosReadDescriptorRequest_FieldNumber_ServiceUuid,
        .hasIndex = 2,
        .offset = (uint32_t)offsetof(ProtosReadDescriptorRequest__storage_, serviceUuid),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeString,
      },
      {
        .name = "secondaryServiceUuid",
        .dataTypeSpecific.className = NULL,
        .number = ProtosReadDescriptorRequest_FieldNumber_SecondaryServiceUuid,
        .hasIndex = 3,
        .offset = (uint32_t)offsetof(ProtosReadDescriptorRequest__storage_, secondaryServiceUuid),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeString,
      },
      {
        .name = "characteristicUuid",
        .dataTypeSpecific.className = NULL,
        .number = ProtosReadDescriptorRequest_FieldNumber_CharacteristicUuid,
        .hasIndex = 4,
        .offset = (uint32_t)offsetof(ProtosReadDescriptorRequest__storage_, characteristicUuid),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeString,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:[ProtosReadDescriptorRequest class]
                                     rootClass:[ProtosFlutterblueRoot class]
                                          file:ProtosFlutterblueRoot_FileDescriptor()
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(ProtosReadDescriptorRequest__storage_)
                                         flags:GPBDescriptorInitializationFlag_None];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - ProtosReadDescriptorResponse

@implementation ProtosReadDescriptorResponse

@dynamic hasRequest, request;
@dynamic value;

typedef struct ProtosReadDescriptorResponse__storage_ {
  uint32_t _has_storage_[1];
  ProtosReadDescriptorRequest *request;
  NSData *value;
} ProtosReadDescriptorResponse__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "request",
        .dataTypeSpecific.className = GPBStringifySymbol(ProtosReadDescriptorRequest),
        .number = ProtosReadDescriptorResponse_FieldNumber_Request,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(ProtosReadDescriptorResponse__storage_, request),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "value",
        .dataTypeSpecific.className = NULL,
        .number = ProtosReadDescriptorResponse_FieldNumber_Value,
        .hasIndex = 1,
        .offset = (uint32_t)offsetof(ProtosReadDescriptorResponse__storage_, value),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeBytes,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:[ProtosReadDescriptorResponse class]
                                     rootClass:[ProtosFlutterblueRoot class]
                                          file:ProtosFlutterblueRoot_FileDescriptor()
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(ProtosReadDescriptorResponse__storage_)
                                         flags:GPBDescriptorInitializationFlag_None];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - ProtosWriteCharacteristicRequest

@implementation ProtosWriteCharacteristicRequest

@dynamic remoteId;
@dynamic characteristicUuid;
@dynamic serviceUuid;
@dynamic secondaryServiceUuid;
@dynamic writeType;
@dynamic value;

typedef struct ProtosWriteCharacteristicRequest__storage_ {
  uint32_t _has_storage_[1];
  ProtosWriteCharacteristicRequest_WriteType writeType;
  NSString *remoteId;
  NSString *characteristicUuid;
  NSString *serviceUuid;
  NSString *secondaryServiceUuid;
  NSData *value;
} ProtosWriteCharacteristicRequest__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "remoteId",
        .dataTypeSpecific.className = NULL,
        .number = ProtosWriteCharacteristicRequest_FieldNumber_RemoteId,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(ProtosWriteCharacteristicRequest__storage_, remoteId),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeString,
      },
      {
        .name = "characteristicUuid",
        .dataTypeSpecific.className = NULL,
        .number = ProtosWriteCharacteristicRequest_FieldNumber_CharacteristicUuid,
        .hasIndex = 1,
        .offset = (uint32_t)offsetof(ProtosWriteCharacteristicRequest__storage_, characteristicUuid),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeString,
      },
      {
        .name = "serviceUuid",
        .dataTypeSpecific.className = NULL,
        .number = ProtosWriteCharacteristicRequest_FieldNumber_ServiceUuid,
        .hasIndex = 2,
        .offset = (uint32_t)offsetof(ProtosWriteCharacteristicRequest__storage_, serviceUuid),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeString,
      },
      {
        .name = "secondaryServiceUuid",
        .dataTypeSpecific.className = NULL,
        .number = ProtosWriteCharacteristicRequest_FieldNumber_SecondaryServiceUuid,
        .hasIndex = 3,
        .offset = (uint32_t)offsetof(ProtosWriteCharacteristicRequest__storage_, secondaryServiceUuid),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeString,
      },
      {
        .name = "writeType",
        .dataTypeSpecific.enumDescFunc = ProtosWriteCharacteristicRequest_WriteType_EnumDescriptor,
        .number = ProtosWriteCharacteristicRequest_FieldNumber_WriteType,
        .hasIndex = 4,
        .offset = (uint32_t)offsetof(ProtosWriteCharacteristicRequest__storage_, writeType),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldHasEnumDescriptor),
        .dataType = GPBDataTypeEnum,
      },
      {
        .name = "value",
        .dataTypeSpecific.className = NULL,
        .number = ProtosWriteCharacteristicRequest_FieldNumber_Value,
        .hasIndex = 5,
        .offset = (uint32_t)offsetof(ProtosWriteCharacteristicRequest__storage_, value),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeBytes,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:[ProtosWriteCharacteristicRequest class]
                                     rootClass:[ProtosFlutterblueRoot class]
                                          file:ProtosFlutterblueRoot_FileDescriptor()
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(ProtosWriteCharacteristicRequest__storage_)
                                         flags:GPBDescriptorInitializationFlag_None];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

int32_t ProtosWriteCharacteristicRequest_WriteType_RawValue(ProtosWriteCharacteristicRequest *message) {
  GPBDescriptor *descriptor = [ProtosWriteCharacteristicRequest descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:ProtosWriteCharacteristicRequest_FieldNumber_WriteType];
  return GPBGetMessageInt32Field(message, field);
}

void SetProtosWriteCharacteristicRequest_WriteType_RawValue(ProtosWriteCharacteristicRequest *message, int32_t value) {
  GPBDescriptor *descriptor = [ProtosWriteCharacteristicRequest descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:ProtosWriteCharacteristicRequest_FieldNumber_WriteType];
  GPBSetInt32IvarWithFieldInternal(message, field, value, descriptor.file.syntax);
}

#pragma mark - Enum ProtosWriteCharacteristicRequest_WriteType

GPBEnumDescriptor *ProtosWriteCharacteristicRequest_WriteType_EnumDescriptor(void) {
  static _Atomic(GPBEnumDescriptor*) descriptor = nil;
  if (!descriptor) {
    static const char *valueNames =
        "WithResponse\000WithoutResponse\000";
    static const int32_t values[] = {
        ProtosWriteCharacteristicRequest_WriteType_WithResponse,
        ProtosWriteCharacteristicRequest_WriteType_WithoutResponse,
    };
    GPBEnumDescriptor *worker =
        [GPBEnumDescriptor allocDescriptorForName:GPBNSStringifySymbol(ProtosWriteCharacteristicRequest_WriteType)
                                       valueNames:valueNames
                                           values:values
                                            count:(uint32_t)(sizeof(values) / sizeof(int32_t))
                                     enumVerifier:ProtosWriteCharacteristicRequest_WriteType_IsValidValue];
    GPBEnumDescriptor *expected = nil;
    if (!atomic_compare_exchange_strong(&descriptor, &expected, worker)) {
      [worker release];
    }
  }
  return descriptor;
}

BOOL ProtosWriteCharacteristicRequest_WriteType_IsValidValue(int32_t value__) {
  switch (value__) {
    case ProtosWriteCharacteristicRequest_WriteType_WithResponse:
    case ProtosWriteCharacteristicRequest_WriteType_WithoutResponse:
      return YES;
    default:
      return NO;
  }
}

#pragma mark - ProtosWriteCharacteristicResponse

@implementation ProtosWriteCharacteristicResponse

@dynamic hasRequest, request;
@dynamic success;

typedef struct ProtosWriteCharacteristicResponse__storage_ {
  uint32_t _has_storage_[1];
  ProtosWriteCharacteristicRequest *request;
} ProtosWriteCharacteristicResponse__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "request",
        .dataTypeSpecific.className = GPBStringifySymbol(ProtosWriteCharacteristicRequest),
        .number = ProtosWriteCharacteristicResponse_FieldNumber_Request,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(ProtosWriteCharacteristicResponse__storage_, request),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "success",
        .dataTypeSpecific.className = NULL,
        .number = ProtosWriteCharacteristicResponse_FieldNumber_Success,
        .hasIndex = 1,
        .offset = 2,  // Stored in _has_storage_ to save space.
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeBool,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:[ProtosWriteCharacteristicResponse class]
                                     rootClass:[ProtosFlutterblueRoot class]
                                          file:ProtosFlutterblueRoot_FileDescriptor()
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(ProtosWriteCharacteristicResponse__storage_)
                                         flags:GPBDescriptorInitializationFlag_None];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - ProtosWriteDescriptorRequest

@implementation ProtosWriteDescriptorRequest

@dynamic remoteId;
@dynamic descriptorUuid;
@dynamic serviceUuid;
@dynamic secondaryServiceUuid;
@dynamic characteristicUuid;
@dynamic value;

typedef struct ProtosWriteDescriptorRequest__storage_ {
  uint32_t _has_storage_[1];
  NSString *remoteId;
  NSString *descriptorUuid;
  NSString *serviceUuid;
  NSString *secondaryServiceUuid;
  NSString *characteristicUuid;
  NSData *value;
} ProtosWriteDescriptorRequest__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "remoteId",
        .dataTypeSpecific.className = NULL,
        .number = ProtosWriteDescriptorRequest_FieldNumber_RemoteId,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(ProtosWriteDescriptorRequest__storage_, remoteId),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeString,
      },
      {
        .name = "descriptorUuid",
        .dataTypeSpecific.className = NULL,
        .number = ProtosWriteDescriptorRequest_FieldNumber_DescriptorUuid,
        .hasIndex = 1,
        .offset = (uint32_t)offsetof(ProtosWriteDescriptorRequest__storage_, descriptorUuid),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeString,
      },
      {
        .name = "serviceUuid",
        .dataTypeSpecific.className = NULL,
        .number = ProtosWriteDescriptorRequest_FieldNumber_ServiceUuid,
        .hasIndex = 2,
        .offset = (uint32_t)offsetof(ProtosWriteDescriptorRequest__storage_, serviceUuid),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeString,
      },
      {
        .name = "secondaryServiceUuid",
        .dataTypeSpecific.className = NULL,
        .number = ProtosWriteDescriptorRequest_FieldNumber_SecondaryServiceUuid,
        .hasIndex = 3,
        .offset = (uint32_t)offsetof(ProtosWriteDescriptorRequest__storage_, secondaryServiceUuid),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeString,
      },
      {
        .name = "characteristicUuid",
        .dataTypeSpecific.className = NULL,
        .number = ProtosWriteDescriptorRequest_FieldNumber_CharacteristicUuid,
        .hasIndex = 4,
        .offset = (uint32_t)offsetof(ProtosWriteDescriptorRequest__storage_, characteristicUuid),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeString,
      },
      {
        .name = "value",
        .dataTypeSpecific.className = NULL,
        .number = ProtosWriteDescriptorRequest_FieldNumber_Value,
        .hasIndex = 5,
        .offset = (uint32_t)offsetof(ProtosWriteDescriptorRequest__storage_, value),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeBytes,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:[ProtosWriteDescriptorRequest class]
                                     rootClass:[ProtosFlutterblueRoot class]
                                          file:ProtosFlutterblueRoot_FileDescriptor()
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(ProtosWriteDescriptorRequest__storage_)
                                         flags:GPBDescriptorInitializationFlag_None];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - ProtosWriteDescriptorResponse

@implementation ProtosWriteDescriptorResponse

@dynamic hasRequest, request;
@dynamic success;

typedef struct ProtosWriteDescriptorResponse__storage_ {
  uint32_t _has_storage_[1];
  ProtosWriteDescriptorRequest *request;
} ProtosWriteDescriptorResponse__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "request",
        .dataTypeSpecific.className = GPBStringifySymbol(ProtosWriteDescriptorRequest),
        .number = ProtosWriteDescriptorResponse_FieldNumber_Request,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(ProtosWriteDescriptorResponse__storage_, request),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "success",
        .dataTypeSpecific.className = NULL,
        .number = ProtosWriteDescriptorResponse_FieldNumber_Success,
        .hasIndex = 1,
        .offset = 2,  // Stored in _has_storage_ to save space.
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeBool,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:[ProtosWriteDescriptorResponse class]
                                     rootClass:[ProtosFlutterblueRoot class]
                                          file:ProtosFlutterblueRoot_FileDescriptor()
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(ProtosWriteDescriptorResponse__storage_)
                                         flags:GPBDescriptorInitializationFlag_None];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - ProtosSetNotificationRequest

@implementation ProtosSetNotificationRequest

@dynamic remoteId;
@dynamic serviceUuid;
@dynamic secondaryServiceUuid;
@dynamic characteristicUuid;
@dynamic enable;

typedef struct ProtosSetNotificationRequest__storage_ {
  uint32_t _has_storage_[1];
  NSString *remoteId;
  NSString *serviceUuid;
  NSString *secondaryServiceUuid;
  NSString *characteristicUuid;
} ProtosSetNotificationRequest__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "remoteId",
        .dataTypeSpecific.className = NULL,
        .number = ProtosSetNotificationRequest_FieldNumber_RemoteId,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(ProtosSetNotificationRequest__storage_, remoteId),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeString,
      },
      {
        .name = "serviceUuid",
        .dataTypeSpecific.className = NULL,
        .number = ProtosSetNotificationRequest_FieldNumber_ServiceUuid,
        .hasIndex = 1,
        .offset = (uint32_t)offsetof(ProtosSetNotificationRequest__storage_, serviceUuid),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeString,
      },
      {
        .name = "secondaryServiceUuid",
        .dataTypeSpecific.className = NULL,
        .number = ProtosSetNotificationRequest_FieldNumber_SecondaryServiceUuid,
        .hasIndex = 2,
        .offset = (uint32_t)offsetof(ProtosSetNotificationRequest__storage_, secondaryServiceUuid),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeString,
      },
      {
        .name = "characteristicUuid",
        .dataTypeSpecific.className = NULL,
        .number = ProtosSetNotificationRequest_FieldNumber_CharacteristicUuid,
        .hasIndex = 3,
        .offset = (uint32_t)offsetof(ProtosSetNotificationRequest__storage_, characteristicUuid),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeString,
      },
      {
        .name = "enable",
        .dataTypeSpecific.className = NULL,
        .number = ProtosSetNotificationRequest_FieldNumber_Enable,
        .hasIndex = 4,
        .offset = 5,  // Stored in _has_storage_ to save space.
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeBool,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:[ProtosSetNotificationRequest class]
                                     rootClass:[ProtosFlutterblueRoot class]
                                          file:ProtosFlutterblueRoot_FileDescriptor()
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(ProtosSetNotificationRequest__storage_)
                                         flags:GPBDescriptorInitializationFlag_None];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - ProtosSetNotificationResponse

@implementation ProtosSetNotificationResponse

@dynamic remoteId;
@dynamic hasCharacteristic, characteristic;
@dynamic success;

typedef struct ProtosSetNotificationResponse__storage_ {
  uint32_t _has_storage_[1];
  NSString *remoteId;
  ProtosBluetoothCharacteristic *characteristic;
} ProtosSetNotificationResponse__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "remoteId",
        .dataTypeSpecific.className = NULL,
        .number = ProtosSetNotificationResponse_FieldNumber_RemoteId,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(ProtosSetNotificationResponse__storage_, remoteId),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeString,
      },
      {
        .name = "characteristic",
        .dataTypeSpecific.className = GPBStringifySymbol(ProtosBluetoothCharacteristic),
        .number = ProtosSetNotificationResponse_FieldNumber_Characteristic,
        .hasIndex = 1,
        .offset = (uint32_t)offsetof(ProtosSetNotificationResponse__storage_, characteristic),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "success",
        .dataTypeSpecific.className = NULL,
        .number = ProtosSetNotificationResponse_FieldNumber_Success,
        .hasIndex = 2,
        .offset = 3,  // Stored in _has_storage_ to save space.
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeBool,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:[ProtosSetNotificationResponse class]
                                     rootClass:[ProtosFlutterblueRoot class]
                                          file:ProtosFlutterblueRoot_FileDescriptor()
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(ProtosSetNotificationResponse__storage_)
                                         flags:GPBDescriptorInitializationFlag_None];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - ProtosOnNotificationResponse

@implementation ProtosOnNotificationResponse

@dynamic remoteId;
@dynamic hasCharacteristic, characteristic;

typedef struct ProtosOnNotificationResponse__storage_ {
  uint32_t _has_storage_[1];
  NSString *remoteId;
  ProtosBluetoothCharacteristic *characteristic;
} ProtosOnNotificationResponse__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "remoteId",
        .dataTypeSpecific.className = NULL,
        .number = ProtosOnNotificationResponse_FieldNumber_RemoteId,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(ProtosOnNotificationResponse__storage_, remoteId),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeString,
      },
      {
        .name = "characteristic",
        .dataTypeSpecific.className = GPBStringifySymbol(ProtosBluetoothCharacteristic),
        .number = ProtosOnNotificationResponse_FieldNumber_Characteristic,
        .hasIndex = 1,
        .offset = (uint32_t)offsetof(ProtosOnNotificationResponse__storage_, characteristic),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:[ProtosOnNotificationResponse class]
                                     rootClass:[ProtosFlutterblueRoot class]
                                          file:ProtosFlutterblueRoot_FileDescriptor()
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(ProtosOnNotificationResponse__storage_)
                                         flags:GPBDescriptorInitializationFlag_None];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - ProtosDeviceStateResponse

@implementation ProtosDeviceStateResponse

@dynamic remoteId;
@dynamic state;

typedef struct ProtosDeviceStateResponse__storage_ {
  uint32_t _has_storage_[1];
  ProtosDeviceStateResponse_BluetoothDeviceState state;
  NSString *remoteId;
} ProtosDeviceStateResponse__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "remoteId",
        .dataTypeSpecific.className = NULL,
        .number = ProtosDeviceStateResponse_FieldNumber_RemoteId,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(ProtosDeviceStateResponse__storage_, remoteId),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeString,
      },
      {
        .name = "state",
        .dataTypeSpecific.enumDescFunc = ProtosDeviceStateResponse_BluetoothDeviceState_EnumDescriptor,
        .number = ProtosDeviceStateResponse_FieldNumber_State,
        .hasIndex = 1,
        .offset = (uint32_t)offsetof(ProtosDeviceStateResponse__storage_, state),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldHasEnumDescriptor),
        .dataType = GPBDataTypeEnum,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:[ProtosDeviceStateResponse class]
                                     rootClass:[ProtosFlutterblueRoot class]
                                          file:ProtosFlutterblueRoot_FileDescriptor()
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(ProtosDeviceStateResponse__storage_)
                                         flags:GPBDescriptorInitializationFlag_None];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

int32_t ProtosDeviceStateResponse_State_RawValue(ProtosDeviceStateResponse *message) {
  GPBDescriptor *descriptor = [ProtosDeviceStateResponse descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:ProtosDeviceStateResponse_FieldNumber_State];
  return GPBGetMessageInt32Field(message, field);
}

void SetProtosDeviceStateResponse_State_RawValue(ProtosDeviceStateResponse *message, int32_t value) {
  GPBDescriptor *descriptor = [ProtosDeviceStateResponse descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:ProtosDeviceStateResponse_FieldNumber_State];
  GPBSetInt32IvarWithFieldInternal(message, field, value, descriptor.file.syntax);
}

#pragma mark - Enum ProtosDeviceStateResponse_BluetoothDeviceState

GPBEnumDescriptor *ProtosDeviceStateResponse_BluetoothDeviceState_EnumDescriptor(void) {
  static _Atomic(GPBEnumDescriptor*) descriptor = nil;
  if (!descriptor) {
    static const char *valueNames =
        "Disconnected\000Connecting\000Connected\000Discon"
        "necting\000";
    static const int32_t values[] = {
        ProtosDeviceStateResponse_BluetoothDeviceState_Disconnected,
        ProtosDeviceStateResponse_BluetoothDeviceState_Connecting,
        ProtosDeviceStateResponse_BluetoothDeviceState_Connected,
        ProtosDeviceStateResponse_BluetoothDeviceState_Disconnecting,
    };
    GPBEnumDescriptor *worker =
        [GPBEnumDescriptor allocDescriptorForName:GPBNSStringifySymbol(ProtosDeviceStateResponse_BluetoothDeviceState)
                                       valueNames:valueNames
                                           values:values
                                            count:(uint32_t)(sizeof(values) / sizeof(int32_t))
                                     enumVerifier:ProtosDeviceStateResponse_BluetoothDeviceState_IsValidValue];
    GPBEnumDescriptor *expected = nil;
    if (!atomic_compare_exchange_strong(&descriptor, &expected, worker)) {
      [worker release];
    }
  }
  return descriptor;
}

BOOL ProtosDeviceStateResponse_BluetoothDeviceState_IsValidValue(int32_t value__) {
  switch (value__) {
    case ProtosDeviceStateResponse_BluetoothDeviceState_Disconnected:
    case ProtosDeviceStateResponse_BluetoothDeviceState_Connecting:
    case ProtosDeviceStateResponse_BluetoothDeviceState_Connected:
    case ProtosDeviceStateResponse_BluetoothDeviceState_Disconnecting:
      return YES;
    default:
      return NO;
  }
}


#pragma clang diagnostic pop

// @@protoc_insertion_point(global_scope)
