// Generated by the protocol buffer compiler.  DO NOT EDIT!
// clang-format off
// source: keyapis/exchange/v1/keyapis_exchange_message_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 "keyapis/exchange/v1/KeyapisExchangeMessageV1.pbobjc.h"
#import "google/api/Annotations.pbobjc.h"
#import "google/api/FieldBehavior.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(GPBInt32Value);
GPBObjCClassDeclaration(GPBStringValue);
GPBObjCClassDeclaration(GPBTimestamp);
GPBObjCClassDeclaration(KEYAPISEXCHANGEYV1MessageMobilePushCall);
GPBObjCClassDeclaration(KEYAPISEXCHANGEYV1MessageMobilePushCall_Message);
GPBObjCClassDeclaration(KEYAPISEXCHANGEYV1MessageMobilePushCall_PushCall);
GPBObjCClassDeclaration(KEYAPISEXCHANGEYV1MessagePushCall);
GPBObjCClassDeclaration(KEYAPISEXCHANGEYV1MessagePushCall_Message);
GPBObjCClassDeclaration(KEYAPISEXCHANGEYV1MessagePushCall_PushCall);
GPBObjCClassDeclaration(KEYAPISEXCHANGEYV1PostMessageFullDuplexRequest);
GPBObjCClassDeclaration(KEYAPISEXCHANGEYV1PostMessageFullDuplexResponse);
GPBObjCClassDeclaration(KEYAPISEXCHANGEYV1PostMessageMobilePushCallRequest);
GPBObjCClassDeclaration(KEYAPISEXCHANGEYV1PostMessageMobilePushCallResponse);
GPBObjCClassDeclaration(KEYAPISEXCHANGEYV1PostMessagePushCallRequest);
GPBObjCClassDeclaration(KEYAPISEXCHANGEYV1PostMessagePushCallResponse);

#pragma mark - KEYAPISEXCHANGEYV1KeyapisExchangeMessageV1Root

@implementation KEYAPISEXCHANGEYV1KeyapisExchangeMessageV1Root

+ (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]];
  }
  return registry;
}

@end

static GPBFileDescription KEYAPISEXCHANGEYV1KeyapisExchangeMessageV1Root_FileDescription = {
  .package = "keyapis.exchange.v1",
  .prefix = "KEYAPISEXCHANGEYV1",
  .syntax = GPBFileSyntaxProto3
};

#pragma mark - Enum KEYAPISEXCHANGEYV1MessagePushCall_PushCall_Type

GPBEnumDescriptor *KEYAPISEXCHANGEYV1MessagePushCall_PushCall_Type_EnumDescriptor(void) {
  static _Atomic(GPBEnumDescriptor*) descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static const char *valueNames =
        "TypeUnknown\000PwaFcm\000PwaApns\000";
    static const int32_t values[] = {
        KEYAPISEXCHANGEYV1MessagePushCall_PushCall_Type_TypeUnknown,
        KEYAPISEXCHANGEYV1MessagePushCall_PushCall_Type_PwaFcm,
        KEYAPISEXCHANGEYV1MessagePushCall_PushCall_Type_PwaApns,
    };
    GPBEnumDescriptor *worker =
        [GPBEnumDescriptor allocDescriptorForName:GPBNSStringifySymbol(KEYAPISEXCHANGEYV1MessagePushCall_PushCall_Type)
                                       valueNames:valueNames
                                           values:values
                                            count:(uint32_t)(sizeof(values) / sizeof(int32_t))
                                     enumVerifier:KEYAPISEXCHANGEYV1MessagePushCall_PushCall_Type_IsValidValue
                                            flags:GPBEnumDescriptorInitializationFlag_None];
    GPBEnumDescriptor *expected = nil;
    if (!atomic_compare_exchange_strong(&descriptor, &expected, worker)) {
      [worker release];
    }
  }
  return descriptor;
}

BOOL KEYAPISEXCHANGEYV1MessagePushCall_PushCall_Type_IsValidValue(int32_t value__) {
  switch (value__) {
    case KEYAPISEXCHANGEYV1MessagePushCall_PushCall_Type_TypeUnknown:
    case KEYAPISEXCHANGEYV1MessagePushCall_PushCall_Type_PwaFcm:
    case KEYAPISEXCHANGEYV1MessagePushCall_PushCall_Type_PwaApns:
      return YES;
    default:
      return NO;
  }
}

#pragma mark - Enum KEYAPISEXCHANGEYV1MessageMobilePushCall_PushCall_Type

GPBEnumDescriptor *KEYAPISEXCHANGEYV1MessageMobilePushCall_PushCall_Type_EnumDescriptor(void) {
  static _Atomic(GPBEnumDescriptor*) descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static const char *valueNames =
        "TypeUnknown\000MobileFcm\000MobileHms\000MobileAp"
        "nsText\000MobileApnsCall\000MobileRustore\000";
    static const int32_t values[] = {
        KEYAPISEXCHANGEYV1MessageMobilePushCall_PushCall_Type_TypeUnknown,
        KEYAPISEXCHANGEYV1MessageMobilePushCall_PushCall_Type_MobileFcm,
        KEYAPISEXCHANGEYV1MessageMobilePushCall_PushCall_Type_MobileHms,
        KEYAPISEXCHANGEYV1MessageMobilePushCall_PushCall_Type_MobileApnsText,
        KEYAPISEXCHANGEYV1MessageMobilePushCall_PushCall_Type_MobileApnsCall,
        KEYAPISEXCHANGEYV1MessageMobilePushCall_PushCall_Type_MobileRustore,
    };
    GPBEnumDescriptor *worker =
        [GPBEnumDescriptor allocDescriptorForName:GPBNSStringifySymbol(KEYAPISEXCHANGEYV1MessageMobilePushCall_PushCall_Type)
                                       valueNames:valueNames
                                           values:values
                                            count:(uint32_t)(sizeof(values) / sizeof(int32_t))
                                     enumVerifier:KEYAPISEXCHANGEYV1MessageMobilePushCall_PushCall_Type_IsValidValue
                                            flags:GPBEnumDescriptorInitializationFlag_None];
    GPBEnumDescriptor *expected = nil;
    if (!atomic_compare_exchange_strong(&descriptor, &expected, worker)) {
      [worker release];
    }
  }
  return descriptor;
}

BOOL KEYAPISEXCHANGEYV1MessageMobilePushCall_PushCall_Type_IsValidValue(int32_t value__) {
  switch (value__) {
    case KEYAPISEXCHANGEYV1MessageMobilePushCall_PushCall_Type_TypeUnknown:
    case KEYAPISEXCHANGEYV1MessageMobilePushCall_PushCall_Type_MobileFcm:
    case KEYAPISEXCHANGEYV1MessageMobilePushCall_PushCall_Type_MobileHms:
    case KEYAPISEXCHANGEYV1MessageMobilePushCall_PushCall_Type_MobileApnsText:
    case KEYAPISEXCHANGEYV1MessageMobilePushCall_PushCall_Type_MobileApnsCall:
    case KEYAPISEXCHANGEYV1MessageMobilePushCall_PushCall_Type_MobileRustore:
      return YES;
    default:
      return NO;
  }
}

#pragma mark - KEYAPISEXCHANGEYV1PostMessageFullDuplexRequest

@implementation KEYAPISEXCHANGEYV1PostMessageFullDuplexRequest

@dynamic taskOneOfCase;
@dynamic requestId;
@dynamic postMessagePushCall;

typedef struct KEYAPISEXCHANGEYV1PostMessageFullDuplexRequest__storage_ {
  uint32_t _has_storage_[2];
  NSString *requestId;
  KEYAPISEXCHANGEYV1PostMessagePushCallRequest *postMessagePushCall;
} KEYAPISEXCHANGEYV1PostMessageFullDuplexRequest__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 = "requestId",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISEXCHANGEYV1PostMessageFullDuplexRequest_FieldNumber_RequestId,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(KEYAPISEXCHANGEYV1PostMessageFullDuplexRequest__storage_, requestId),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeString,
      },
      {
        .name = "postMessagePushCall",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISEXCHANGEYV1PostMessagePushCallRequest),
        .number = KEYAPISEXCHANGEYV1PostMessageFullDuplexRequest_FieldNumber_PostMessagePushCall,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISEXCHANGEYV1PostMessageFullDuplexRequest__storage_, postMessagePushCall),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISEXCHANGEYV1PostMessageFullDuplexRequest)
                                   messageName:@"PostMessageFullDuplexRequest"
                               fileDescription:&KEYAPISEXCHANGEYV1KeyapisExchangeMessageV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISEXCHANGEYV1PostMessageFullDuplexRequest__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    static const char *oneofs[] = {
      "task",
    };
    [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 KEYAPISEXCHANGEYV1PostMessageFullDuplexRequest_ClearTaskOneOfCase(KEYAPISEXCHANGEYV1PostMessageFullDuplexRequest *message) {
  GPBDescriptor *descriptor = [KEYAPISEXCHANGEYV1PostMessageFullDuplexRequest descriptor];
  GPBOneofDescriptor *oneof = [descriptor.oneofs objectAtIndex:0];
  GPBClearOneof(message, oneof);
}
#pragma mark - KEYAPISEXCHANGEYV1PostMessageFullDuplexResponse

@implementation KEYAPISEXCHANGEYV1PostMessageFullDuplexResponse

@dynamic eventOneOfCase;
@dynamic requestId;
@dynamic postMessagePushCall;

typedef struct KEYAPISEXCHANGEYV1PostMessageFullDuplexResponse__storage_ {
  uint32_t _has_storage_[2];
  NSString *requestId;
  KEYAPISEXCHANGEYV1PostMessagePushCallResponse *postMessagePushCall;
} KEYAPISEXCHANGEYV1PostMessageFullDuplexResponse__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 = "requestId",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISEXCHANGEYV1PostMessageFullDuplexResponse_FieldNumber_RequestId,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(KEYAPISEXCHANGEYV1PostMessageFullDuplexResponse__storage_, requestId),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeString,
      },
      {
        .name = "postMessagePushCall",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISEXCHANGEYV1PostMessagePushCallResponse),
        .number = KEYAPISEXCHANGEYV1PostMessageFullDuplexResponse_FieldNumber_PostMessagePushCall,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISEXCHANGEYV1PostMessageFullDuplexResponse__storage_, postMessagePushCall),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISEXCHANGEYV1PostMessageFullDuplexResponse)
                                   messageName:@"PostMessageFullDuplexResponse"
                               fileDescription:&KEYAPISEXCHANGEYV1KeyapisExchangeMessageV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISEXCHANGEYV1PostMessageFullDuplexResponse__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    static const char *oneofs[] = {
      "event",
    };
    [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 KEYAPISEXCHANGEYV1PostMessageFullDuplexResponse_ClearEventOneOfCase(KEYAPISEXCHANGEYV1PostMessageFullDuplexResponse *message) {
  GPBDescriptor *descriptor = [KEYAPISEXCHANGEYV1PostMessageFullDuplexResponse descriptor];
  GPBOneofDescriptor *oneof = [descriptor.oneofs objectAtIndex:0];
  GPBClearOneof(message, oneof);
}
#pragma mark - KEYAPISEXCHANGEYV1MessagePushCall

@implementation KEYAPISEXCHANGEYV1MessagePushCall

@dynamic hasMessage, message;
@dynamic hasPushCall, pushCall;

typedef struct KEYAPISEXCHANGEYV1MessagePushCall__storage_ {
  uint32_t _has_storage_[1];
  KEYAPISEXCHANGEYV1MessagePushCall_Message *message;
  KEYAPISEXCHANGEYV1MessagePushCall_PushCall *pushCall;
} KEYAPISEXCHANGEYV1MessagePushCall__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 = "message",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISEXCHANGEYV1MessagePushCall_Message),
        .number = KEYAPISEXCHANGEYV1MessagePushCall_FieldNumber_Message,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(KEYAPISEXCHANGEYV1MessagePushCall__storage_, message),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "pushCall",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISEXCHANGEYV1MessagePushCall_PushCall),
        .number = KEYAPISEXCHANGEYV1MessagePushCall_FieldNumber_PushCall,
        .hasIndex = 1,
        .offset = (uint32_t)offsetof(KEYAPISEXCHANGEYV1MessagePushCall__storage_, pushCall),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISEXCHANGEYV1MessagePushCall)
                                   messageName:@"MessagePushCall"
                               fileDescription:&KEYAPISEXCHANGEYV1KeyapisExchangeMessageV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISEXCHANGEYV1MessagePushCall__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 - KEYAPISEXCHANGEYV1MessagePushCall_Message

@implementation KEYAPISEXCHANGEYV1MessagePushCall_Message

@dynamic title;
@dynamic deviceId;
@dynamic hasDeviceTitle, deviceTitle;
@dynamic hasDeviceCameraId, deviceCameraId;
@dynamic sipServerHost;
@dynamic sipServerPort;
@dynamic sipAccountLogin;
@dynamic sipAccountPassword;
@dynamic hasCallCreatedAt, callCreatedAt;

typedef struct KEYAPISEXCHANGEYV1MessagePushCall_Message__storage_ {
  uint32_t _has_storage_[1];
  int32_t deviceId;
  int32_t sipServerPort;
  NSString *title;
  GPBStringValue *deviceTitle;
  GPBStringValue *deviceCameraId;
  NSString *sipServerHost;
  NSString *sipAccountLogin;
  NSString *sipAccountPassword;
  GPBTimestamp *callCreatedAt;
} KEYAPISEXCHANGEYV1MessagePushCall_Message__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 = "title",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISEXCHANGEYV1MessagePushCall_Message_FieldNumber_Title,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(KEYAPISEXCHANGEYV1MessagePushCall_Message__storage_, title),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeString,
      },
      {
        .name = "deviceId",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISEXCHANGEYV1MessagePushCall_Message_FieldNumber_DeviceId,
        .hasIndex = 1,
        .offset = (uint32_t)offsetof(KEYAPISEXCHANGEYV1MessagePushCall_Message__storage_, deviceId),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeInt32,
      },
      {
        .name = "deviceTitle",
        .dataTypeSpecific.clazz = GPBObjCClass(GPBStringValue),
        .number = KEYAPISEXCHANGEYV1MessagePushCall_Message_FieldNumber_DeviceTitle,
        .hasIndex = 2,
        .offset = (uint32_t)offsetof(KEYAPISEXCHANGEYV1MessagePushCall_Message__storage_, deviceTitle),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "deviceCameraId",
        .dataTypeSpecific.clazz = GPBObjCClass(GPBStringValue),
        .number = KEYAPISEXCHANGEYV1MessagePushCall_Message_FieldNumber_DeviceCameraId,
        .hasIndex = 3,
        .offset = (uint32_t)offsetof(KEYAPISEXCHANGEYV1MessagePushCall_Message__storage_, deviceCameraId),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "sipServerHost",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISEXCHANGEYV1MessagePushCall_Message_FieldNumber_SipServerHost,
        .hasIndex = 4,
        .offset = (uint32_t)offsetof(KEYAPISEXCHANGEYV1MessagePushCall_Message__storage_, sipServerHost),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeString,
      },
      {
        .name = "sipServerPort",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISEXCHANGEYV1MessagePushCall_Message_FieldNumber_SipServerPort,
        .hasIndex = 5,
        .offset = (uint32_t)offsetof(KEYAPISEXCHANGEYV1MessagePushCall_Message__storage_, sipServerPort),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeInt32,
      },
      {
        .name = "sipAccountLogin",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISEXCHANGEYV1MessagePushCall_Message_FieldNumber_SipAccountLogin,
        .hasIndex = 6,
        .offset = (uint32_t)offsetof(KEYAPISEXCHANGEYV1MessagePushCall_Message__storage_, sipAccountLogin),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeString,
      },
      {
        .name = "sipAccountPassword",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISEXCHANGEYV1MessagePushCall_Message_FieldNumber_SipAccountPassword,
        .hasIndex = 7,
        .offset = (uint32_t)offsetof(KEYAPISEXCHANGEYV1MessagePushCall_Message__storage_, sipAccountPassword),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeString,
      },
      {
        .name = "callCreatedAt",
        .dataTypeSpecific.clazz = GPBObjCClass(GPBTimestamp),
        .number = KEYAPISEXCHANGEYV1MessagePushCall_Message_FieldNumber_CallCreatedAt,
        .hasIndex = 8,
        .offset = (uint32_t)offsetof(KEYAPISEXCHANGEYV1MessagePushCall_Message__storage_, callCreatedAt),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISEXCHANGEYV1MessagePushCall_Message)
                                   messageName:@"Message"
                               fileDescription:&KEYAPISEXCHANGEYV1KeyapisExchangeMessageV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISEXCHANGEYV1MessagePushCall_Message__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    [localDescriptor setupContainingMessageClass:GPBObjCClass(KEYAPISEXCHANGEYV1MessagePushCall)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - KEYAPISEXCHANGEYV1MessagePushCall_PushCall

@implementation KEYAPISEXCHANGEYV1MessagePushCall_PushCall

@dynamic token;
@dynamic type;

typedef struct KEYAPISEXCHANGEYV1MessagePushCall_PushCall__storage_ {
  uint32_t _has_storage_[1];
  KEYAPISEXCHANGEYV1MessagePushCall_PushCall_Type type;
  NSString *token;
} KEYAPISEXCHANGEYV1MessagePushCall_PushCall__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 = "token",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISEXCHANGEYV1MessagePushCall_PushCall_FieldNumber_Token,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(KEYAPISEXCHANGEYV1MessagePushCall_PushCall__storage_, token),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeString,
      },
      {
        .name = "type",
        .dataTypeSpecific.enumDescFunc = KEYAPISEXCHANGEYV1MessagePushCall_PushCall_Type_EnumDescriptor,
        .number = KEYAPISEXCHANGEYV1MessagePushCall_PushCall_FieldNumber_Type,
        .hasIndex = 1,
        .offset = (uint32_t)offsetof(KEYAPISEXCHANGEYV1MessagePushCall_PushCall__storage_, type),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldHasEnumDescriptor | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeEnum,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISEXCHANGEYV1MessagePushCall_PushCall)
                                   messageName:@"PushCall"
                               fileDescription:&KEYAPISEXCHANGEYV1KeyapisExchangeMessageV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISEXCHANGEYV1MessagePushCall_PushCall__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    [localDescriptor setupContainingMessageClass:GPBObjCClass(KEYAPISEXCHANGEYV1MessagePushCall)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

int32_t KEYAPISEXCHANGEYV1MessagePushCall_PushCall_Type_RawValue(KEYAPISEXCHANGEYV1MessagePushCall_PushCall *message) {
  GPBDescriptor *descriptor = [KEYAPISEXCHANGEYV1MessagePushCall_PushCall descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:KEYAPISEXCHANGEYV1MessagePushCall_PushCall_FieldNumber_Type];
  return GPBGetMessageRawEnumField(message, field);
}

void SetKEYAPISEXCHANGEYV1MessagePushCall_PushCall_Type_RawValue(KEYAPISEXCHANGEYV1MessagePushCall_PushCall *message, int32_t value) {
  GPBDescriptor *descriptor = [KEYAPISEXCHANGEYV1MessagePushCall_PushCall descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:KEYAPISEXCHANGEYV1MessagePushCall_PushCall_FieldNumber_Type];
  GPBSetMessageRawEnumField(message, field, value);
}

#pragma mark - KEYAPISEXCHANGEYV1MessageMobilePushCall

@implementation KEYAPISEXCHANGEYV1MessageMobilePushCall

@dynamic hasMessage, message;
@dynamic hasPushCall, pushCall;

typedef struct KEYAPISEXCHANGEYV1MessageMobilePushCall__storage_ {
  uint32_t _has_storage_[1];
  KEYAPISEXCHANGEYV1MessageMobilePushCall_Message *message;
  KEYAPISEXCHANGEYV1MessageMobilePushCall_PushCall *pushCall;
} KEYAPISEXCHANGEYV1MessageMobilePushCall__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 = "message",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISEXCHANGEYV1MessageMobilePushCall_Message),
        .number = KEYAPISEXCHANGEYV1MessageMobilePushCall_FieldNumber_Message,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(KEYAPISEXCHANGEYV1MessageMobilePushCall__storage_, message),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "pushCall",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISEXCHANGEYV1MessageMobilePushCall_PushCall),
        .number = KEYAPISEXCHANGEYV1MessageMobilePushCall_FieldNumber_PushCall,
        .hasIndex = 1,
        .offset = (uint32_t)offsetof(KEYAPISEXCHANGEYV1MessageMobilePushCall__storage_, pushCall),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISEXCHANGEYV1MessageMobilePushCall)
                                   messageName:@"MessageMobilePushCall"
                               fileDescription:&KEYAPISEXCHANGEYV1KeyapisExchangeMessageV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISEXCHANGEYV1MessageMobilePushCall__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 - KEYAPISEXCHANGEYV1MessageMobilePushCall_Message

@implementation KEYAPISEXCHANGEYV1MessageMobilePushCall_Message

@dynamic title;
@dynamic deviceId;
@dynamic hasDeviceTitle, deviceTitle;
@dynamic hasDeviceCameraId, deviceCameraId;
@dynamic sipToken;
@dynamic hasSipServerHost, sipServerHost;
@dynamic hasSipServerPort, sipServerPort;
@dynamic hasSipAccountLogin, sipAccountLogin;
@dynamic hasSipAccountPassword, sipAccountPassword;
@dynamic hasStunServerHost, stunServerHost;
@dynamic hasStunServerPort, stunServerPort;
@dynamic hasCallCreatedAt, callCreatedAt;

typedef struct KEYAPISEXCHANGEYV1MessageMobilePushCall_Message__storage_ {
  uint32_t _has_storage_[1];
  int32_t deviceId;
  NSString *title;
  GPBStringValue *deviceTitle;
  GPBStringValue *deviceCameraId;
  NSString *sipToken;
  GPBStringValue *sipServerHost;
  GPBInt32Value *sipServerPort;
  GPBStringValue *sipAccountLogin;
  GPBStringValue *sipAccountPassword;
  GPBStringValue *stunServerHost;
  GPBInt32Value *stunServerPort;
  GPBTimestamp *callCreatedAt;
} KEYAPISEXCHANGEYV1MessageMobilePushCall_Message__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 = "title",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISEXCHANGEYV1MessageMobilePushCall_Message_FieldNumber_Title,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(KEYAPISEXCHANGEYV1MessageMobilePushCall_Message__storage_, title),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeString,
      },
      {
        .name = "deviceId",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISEXCHANGEYV1MessageMobilePushCall_Message_FieldNumber_DeviceId,
        .hasIndex = 1,
        .offset = (uint32_t)offsetof(KEYAPISEXCHANGEYV1MessageMobilePushCall_Message__storage_, deviceId),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeInt32,
      },
      {
        .name = "deviceTitle",
        .dataTypeSpecific.clazz = GPBObjCClass(GPBStringValue),
        .number = KEYAPISEXCHANGEYV1MessageMobilePushCall_Message_FieldNumber_DeviceTitle,
        .hasIndex = 2,
        .offset = (uint32_t)offsetof(KEYAPISEXCHANGEYV1MessageMobilePushCall_Message__storage_, deviceTitle),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "deviceCameraId",
        .dataTypeSpecific.clazz = GPBObjCClass(GPBStringValue),
        .number = KEYAPISEXCHANGEYV1MessageMobilePushCall_Message_FieldNumber_DeviceCameraId,
        .hasIndex = 3,
        .offset = (uint32_t)offsetof(KEYAPISEXCHANGEYV1MessageMobilePushCall_Message__storage_, deviceCameraId),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "sipToken",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISEXCHANGEYV1MessageMobilePushCall_Message_FieldNumber_SipToken,
        .hasIndex = 4,
        .offset = (uint32_t)offsetof(KEYAPISEXCHANGEYV1MessageMobilePushCall_Message__storage_, sipToken),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeString,
      },
      {
        .name = "sipServerHost",
        .dataTypeSpecific.clazz = GPBObjCClass(GPBStringValue),
        .number = KEYAPISEXCHANGEYV1MessageMobilePushCall_Message_FieldNumber_SipServerHost,
        .hasIndex = 5,
        .offset = (uint32_t)offsetof(KEYAPISEXCHANGEYV1MessageMobilePushCall_Message__storage_, sipServerHost),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "sipServerPort",
        .dataTypeSpecific.clazz = GPBObjCClass(GPBInt32Value),
        .number = KEYAPISEXCHANGEYV1MessageMobilePushCall_Message_FieldNumber_SipServerPort,
        .hasIndex = 6,
        .offset = (uint32_t)offsetof(KEYAPISEXCHANGEYV1MessageMobilePushCall_Message__storage_, sipServerPort),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "sipAccountLogin",
        .dataTypeSpecific.clazz = GPBObjCClass(GPBStringValue),
        .number = KEYAPISEXCHANGEYV1MessageMobilePushCall_Message_FieldNumber_SipAccountLogin,
        .hasIndex = 7,
        .offset = (uint32_t)offsetof(KEYAPISEXCHANGEYV1MessageMobilePushCall_Message__storage_, sipAccountLogin),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "sipAccountPassword",
        .dataTypeSpecific.clazz = GPBObjCClass(GPBStringValue),
        .number = KEYAPISEXCHANGEYV1MessageMobilePushCall_Message_FieldNumber_SipAccountPassword,
        .hasIndex = 8,
        .offset = (uint32_t)offsetof(KEYAPISEXCHANGEYV1MessageMobilePushCall_Message__storage_, sipAccountPassword),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "stunServerHost",
        .dataTypeSpecific.clazz = GPBObjCClass(GPBStringValue),
        .number = KEYAPISEXCHANGEYV1MessageMobilePushCall_Message_FieldNumber_StunServerHost,
        .hasIndex = 9,
        .offset = (uint32_t)offsetof(KEYAPISEXCHANGEYV1MessageMobilePushCall_Message__storage_, stunServerHost),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "stunServerPort",
        .dataTypeSpecific.clazz = GPBObjCClass(GPBInt32Value),
        .number = KEYAPISEXCHANGEYV1MessageMobilePushCall_Message_FieldNumber_StunServerPort,
        .hasIndex = 10,
        .offset = (uint32_t)offsetof(KEYAPISEXCHANGEYV1MessageMobilePushCall_Message__storage_, stunServerPort),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "callCreatedAt",
        .dataTypeSpecific.clazz = GPBObjCClass(GPBTimestamp),
        .number = KEYAPISEXCHANGEYV1MessageMobilePushCall_Message_FieldNumber_CallCreatedAt,
        .hasIndex = 11,
        .offset = (uint32_t)offsetof(KEYAPISEXCHANGEYV1MessageMobilePushCall_Message__storage_, callCreatedAt),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISEXCHANGEYV1MessageMobilePushCall_Message)
                                   messageName:@"Message"
                               fileDescription:&KEYAPISEXCHANGEYV1KeyapisExchangeMessageV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISEXCHANGEYV1MessageMobilePushCall_Message__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    [localDescriptor setupContainingMessageClass:GPBObjCClass(KEYAPISEXCHANGEYV1MessageMobilePushCall)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - KEYAPISEXCHANGEYV1MessageMobilePushCall_PushCall

@implementation KEYAPISEXCHANGEYV1MessageMobilePushCall_PushCall

@dynamic token;
@dynamic type;

typedef struct KEYAPISEXCHANGEYV1MessageMobilePushCall_PushCall__storage_ {
  uint32_t _has_storage_[1];
  KEYAPISEXCHANGEYV1MessageMobilePushCall_PushCall_Type type;
  NSString *token;
} KEYAPISEXCHANGEYV1MessageMobilePushCall_PushCall__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 = "token",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISEXCHANGEYV1MessageMobilePushCall_PushCall_FieldNumber_Token,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(KEYAPISEXCHANGEYV1MessageMobilePushCall_PushCall__storage_, token),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeString,
      },
      {
        .name = "type",
        .dataTypeSpecific.enumDescFunc = KEYAPISEXCHANGEYV1MessageMobilePushCall_PushCall_Type_EnumDescriptor,
        .number = KEYAPISEXCHANGEYV1MessageMobilePushCall_PushCall_FieldNumber_Type,
        .hasIndex = 1,
        .offset = (uint32_t)offsetof(KEYAPISEXCHANGEYV1MessageMobilePushCall_PushCall__storage_, type),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldHasEnumDescriptor | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeEnum,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISEXCHANGEYV1MessageMobilePushCall_PushCall)
                                   messageName:@"PushCall"
                               fileDescription:&KEYAPISEXCHANGEYV1KeyapisExchangeMessageV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISEXCHANGEYV1MessageMobilePushCall_PushCall__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    [localDescriptor setupContainingMessageClass:GPBObjCClass(KEYAPISEXCHANGEYV1MessageMobilePushCall)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

int32_t KEYAPISEXCHANGEYV1MessageMobilePushCall_PushCall_Type_RawValue(KEYAPISEXCHANGEYV1MessageMobilePushCall_PushCall *message) {
  GPBDescriptor *descriptor = [KEYAPISEXCHANGEYV1MessageMobilePushCall_PushCall descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:KEYAPISEXCHANGEYV1MessageMobilePushCall_PushCall_FieldNumber_Type];
  return GPBGetMessageRawEnumField(message, field);
}

void SetKEYAPISEXCHANGEYV1MessageMobilePushCall_PushCall_Type_RawValue(KEYAPISEXCHANGEYV1MessageMobilePushCall_PushCall *message, int32_t value) {
  GPBDescriptor *descriptor = [KEYAPISEXCHANGEYV1MessageMobilePushCall_PushCall descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:KEYAPISEXCHANGEYV1MessageMobilePushCall_PushCall_FieldNumber_Type];
  GPBSetMessageRawEnumField(message, field, value);
}

#pragma mark - KEYAPISEXCHANGEYV1PostMessagePushCallRequest

@implementation KEYAPISEXCHANGEYV1PostMessagePushCallRequest

@dynamic hasData_p, data_p;

typedef struct KEYAPISEXCHANGEYV1PostMessagePushCallRequest__storage_ {
  uint32_t _has_storage_[1];
  KEYAPISEXCHANGEYV1MessagePushCall *data_p;
} KEYAPISEXCHANGEYV1PostMessagePushCallRequest__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(KEYAPISEXCHANGEYV1MessagePushCall),
        .number = KEYAPISEXCHANGEYV1PostMessagePushCallRequest_FieldNumber_Data_p,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(KEYAPISEXCHANGEYV1PostMessagePushCallRequest__storage_, data_p),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISEXCHANGEYV1PostMessagePushCallRequest)
                                   messageName:@"PostMessagePushCallRequest"
                               fileDescription:&KEYAPISEXCHANGEYV1KeyapisExchangeMessageV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISEXCHANGEYV1PostMessagePushCallRequest__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 - KEYAPISEXCHANGEYV1PostMessagePushCallResponse

@implementation KEYAPISEXCHANGEYV1PostMessagePushCallResponse


typedef struct KEYAPISEXCHANGEYV1PostMessagePushCallResponse__storage_ {
  uint32_t _has_storage_[1];
} KEYAPISEXCHANGEYV1PostMessagePushCallResponse__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(KEYAPISEXCHANGEYV1PostMessagePushCallResponse)
                                   messageName:@"PostMessagePushCallResponse"
                               fileDescription:&KEYAPISEXCHANGEYV1KeyapisExchangeMessageV1Root_FileDescription
                                        fields:NULL
                                    fieldCount:0
                                   storageSize:sizeof(KEYAPISEXCHANGEYV1PostMessagePushCallResponse__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 - KEYAPISEXCHANGEYV1PostMessageMobilePushCallRequest

@implementation KEYAPISEXCHANGEYV1PostMessageMobilePushCallRequest

@dynamic hasData_p, data_p;

typedef struct KEYAPISEXCHANGEYV1PostMessageMobilePushCallRequest__storage_ {
  uint32_t _has_storage_[1];
  KEYAPISEXCHANGEYV1MessageMobilePushCall *data_p;
} KEYAPISEXCHANGEYV1PostMessageMobilePushCallRequest__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(KEYAPISEXCHANGEYV1MessageMobilePushCall),
        .number = KEYAPISEXCHANGEYV1PostMessageMobilePushCallRequest_FieldNumber_Data_p,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(KEYAPISEXCHANGEYV1PostMessageMobilePushCallRequest__storage_, data_p),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISEXCHANGEYV1PostMessageMobilePushCallRequest)
                                   messageName:@"PostMessageMobilePushCallRequest"
                               fileDescription:&KEYAPISEXCHANGEYV1KeyapisExchangeMessageV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISEXCHANGEYV1PostMessageMobilePushCallRequest__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 - KEYAPISEXCHANGEYV1PostMessageMobilePushCallResponse

@implementation KEYAPISEXCHANGEYV1PostMessageMobilePushCallResponse


typedef struct KEYAPISEXCHANGEYV1PostMessageMobilePushCallResponse__storage_ {
  uint32_t _has_storage_[1];
} KEYAPISEXCHANGEYV1PostMessageMobilePushCallResponse__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(KEYAPISEXCHANGEYV1PostMessageMobilePushCallResponse)
                                   messageName:@"PostMessageMobilePushCallResponse"
                               fileDescription:&KEYAPISEXCHANGEYV1KeyapisExchangeMessageV1Root_FileDescription
                                        fields:NULL
                                    fieldCount:0
                                   storageSize:sizeof(KEYAPISEXCHANGEYV1PostMessageMobilePushCallResponse__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
