import { FileDescriptorProto, FieldDescriptorProto, DescriptorProto, OneofDescriptorProto } from 'google-protobuf/google/protobuf/descriptor_pb';
import { ProtoAbstractSyntaxTreeMap } from '../proto-ast-map';
import { IEnumDescriptorProtoModel } from './enum-descriptor-formatter';
import { IExtensionDescriptorProtoModel } from './extension-descriptor-formatter';
import { IOneofDescriptorProtoModel } from './oneof-descriptor-formatter';
export interface IMessageType {
    messageName: string;
    oneofGroups: FieldDescriptorProto[][];
    oneofDeclList: OneofDescriptorProto[];
    fields: IMessageFieldType[];
    nestedTypes: IMessageDescriptorProtoModel[];
    formattedEnumListStr: IEnumDescriptorProtoModel[];
    formattedOneofListStr: IOneofDescriptorProtoModel[];
    formattedExtListStr: IExtensionDescriptorProtoModel[];
}
export interface IMessageDescriptorProtoModel {
    indent: string;
    BYTES_TYPE: number;
    MESSAGE_TYPE: number;
    message: IMessageType;
}
export declare const DefaultMessageType: string;
export interface IMessageFieldType {
    snakeCaseName: string;
    camelCaseName: string;
    camelUpperName: string;
    fieldObjectType: string;
    type: FieldDescriptorProto.Type;
    exportType: string;
    isMapField: boolean;
    mapFieldInfo?: IMessageMapField;
    isRepeatField: boolean;
    isOptionalValue: boolean;
    canBeUndefined: boolean;
    hasClearMethodCreated: boolean;
    hasFieldPresence: boolean;
}
export declare const DefaultMessageFieldType: string;
export interface IMessageMapField {
    keyType: FieldDescriptorProto.Type;
    keyTypeName: string;
    valueType: FieldDescriptorProto.Type;
    valueTypeName: string;
}
export declare function formatMessageTypeDescriptorProto(protoFileName: string, protoAbstractSyntaxTreeMap: ProtoAbstractSyntaxTreeMap, messageTypeDescriptorProto: DescriptorProto, indent: string, fileDescriptorProto: FileDescriptorProto): IMessageDescriptorProtoModel;
