import type { EnumUtil, ExternalMessage, FieldConfig, InternalMessage, PropertyTypes } from './internal_types'; export type { EnumUtil }; export type OneofMessage = InternalMessage; export interface MessageCtr>> extends InternalMessage { new (opts?: ConstructorParams): PropertyTypes; createUnchecked(opts?: ConstructorParams): PropertyTypes; } interface RequiredFactory { (tag: number): FieldConfig; (tag: number, def: T): FieldConfig; (jsonFullKey: string, tag: number): FieldConfig; (jsonFullKey: string, tag: number, def: T): FieldConfig; } interface OptionalField { (tag: number): FieldConfig; (jsonFullKey: string, tag: number): FieldConfig; } interface RepeatedField { (tag: number): FieldConfig; (jsonFullKey: string, tag: number): FieldConfig; } type MapField = { (tag: number): FieldConfig, ReadonlyMap | undefined>; (jsonFullKey: string, tag: number): FieldConfig, ReadonlyMap | undefined>; }; type MapFieldObject = { (tag: number, Msg: ExternalMessage): FieldConfig, ReadonlyMap | undefined>; (jsonFullKey: string, tag: number, Msg: ExternalMessage): FieldConfig, ReadonlyMap | undefined>; }; type MapFieldEnum = { (tag: number, EnumUtil: EnumUtil): FieldConfig, ReadonlyMap | undefined>; (jsonFullKey: string, tag: number, EnumUtil: EnumUtil): FieldConfig, ReadonlyMap | undefined>; }; export declare class Proto { static constantString(jsonMiniKey: string, tag: number, value: T): FieldConfig; static constantString(jsonFullKey: string, jsonFullValue: string, tag: number, value: T): FieldConfig; static constantStringWithDefault(jsonMiniKey: string, tag: number, value: T): FieldConfig; static constantStringWithDefault(jsonFullKey: string, jsonFullValue: string, tag: number, value: T): FieldConfig; static readonly requiredDouble: RequiredFactory; static readonly requiredInt32: RequiredFactory; static readonly requiredInt64: RequiredFactory; static readonly optionalDouble: OptionalField; static readonly optionalInt32: OptionalField; static readonly optionalInt64: OptionalField; static readonly repeatedDouble: RepeatedField; static readonly repeatedInt32: RepeatedField; static readonly repeatedInt64: RepeatedField; static readonly requiredString: RequiredFactory; static readonly optionalString: OptionalField; static readonly repeatedString: RepeatedField; static readonly requiredBoolean: RequiredFactory; static readonly optionalBoolean: OptionalField; static readonly repeatedBoolean: RepeatedField; static readonly requiredBytes: RequiredFactory; static readonly optionalBytes: OptionalField; static readonly repeatedBytes: RepeatedField; static requiredObject(tag: number, obj: ExternalMessage): FieldConfig; static requiredObject(jsonFullKey: string, tag: number, obj: ExternalMessage): FieldConfig; static optionalObject(tag: number, obj: ExternalMessage): FieldConfig; static optionalObject(jsonFullKey: string, tag: number, obj: ExternalMessage): FieldConfig; static repeatedObject(tag: number, obj: ExternalMessage): FieldConfig; static repeatedObject(jsonFullKey: string, tag: number, obj: ExternalMessage): FieldConfig; static requiredStringEnum(tag: number, obj: EnumUtil): FieldConfig; static requiredStringEnum(tag: number, obj: EnumUtil, def: T): FieldConfig; static requiredStringEnum(jsonFullKey: string, tag: number, obj: EnumUtil): FieldConfig; static requiredStringEnum(jsonFullKey: string, tag: number, obj: EnumUtil, def: T): FieldConfig; static optionalStringEnum(tag: number, obj: EnumUtil): FieldConfig; static optionalStringEnum(jsonFullKey: string, tag: number, obj: EnumUtil): FieldConfig; static repeatedStringEnum(tag: number, obj: EnumUtil): FieldConfig; static repeatedStringEnum(jsonFullKey: string, tag: number, obj: EnumUtil): FieldConfig; static readonly booleanInt64Map: MapField; static readonly int32Int32Map: MapField; static readonly int32Int64Map: MapField; static readonly int32BoolMap: MapField; static readonly int32DoubleMap: MapField; static readonly int32StringMap: MapField; static readonly int32StringEnumMap: MapFieldEnum; static readonly int32ObjectMap: MapFieldObject; static readonly int32BytesMap: MapField>; static readonly int64Int32Map: MapField; static readonly int64Int64Map: MapField; static readonly int64BooleanMap: MapField; static readonly int64DoubleMap: MapField; static readonly int64StringMap: MapField; static readonly int64StringEnumMap: MapFieldEnum; static readonly int64ObjectMap: MapFieldObject; static readonly int64BytesMap: MapField>; static readonly doubleInt32Map: MapField; static readonly doubleInt64Map: MapField; static readonly doubleBoolMap: MapField; static readonly doubleDoubleMap: MapField; static readonly doubleStringMap: MapField; static readonly doubleStringEnumMap: MapFieldEnum; static readonly doubleObjectMap: MapFieldObject; static readonly doubleBytesMap: MapField>; static readonly stringInt32Map: MapField; static readonly stringInt64Map: MapField; static readonly stringBooleanMap: MapField; static readonly stringDoubleMap: MapField; static readonly stringStringMap: MapField; static readonly stringStringEnumMap: MapFieldEnum; static readonly stringObjectMap: MapFieldObject; static readonly stringBytesMap: MapField>; static createMessage>>( schema: () => T, options?: { unproducible?: true; dualDeserializationConfig?: DualDeserializationConfig; } ): MessageCtr; static createOneof>( schema: () => Record)[]>, commonFields: () => Record>, options?: { unproducible?: true; dualDeserializationConfig?: DualDeserializationConfig; defaultCase?: () => ExternalMessage; } ): OneofMessage; static createEnumUtil( schema: () => (number | string | { unproducible: true; })[], baseNumber?: number, options?: { dualDeserializationConfig?: DualDeserializationConfig; } ): EnumUtil; } type ConstructorParams>> = { [k in OptionalKeys]?: T[k] extends FieldConfig ? U : never; } & { [k in RequiredKeys]: T[k] extends FieldConfig ? U : never; }; type OptionalKeys>> = Exclude<{ [k in keyof T]: T[k] extends FieldConfig ? undefined extends U ? k : X extends number | boolean ? k : never : never; }[keyof T], undefined>; type RequiredKeys>> = { [k in keyof T]: T[k] extends FieldConfig ? undefined extends U ? never : X extends number | boolean ? never : k : never; }[keyof T]; export declare const enum DualDeserializationConfig { MINI_PRIMARY_FULL_SECONDARY = 0, FULL_PRIMARY_MINI_SECONDARY = 1 }