import { BinaryReader, BinaryWriter } from "../../../binary";
import { DeepPartial } from "../../../helpers";
/**
 * TableDescriptor describes an ORM table.
 * @name TableDescriptor
 * @package cosmos.orm.v1
 * @see proto type: cosmos.orm.v1.TableDescriptor
 */
export interface TableDescriptor {
    /**
     * primary_key defines the primary key for the table.
     */
    primaryKey?: PrimaryKeyDescriptor;
    /**
     * index defines one or more secondary indexes.
     */
    index: SecondaryIndexDescriptor[];
    /**
     * id is a non-zero integer ID that must be unique within the
     * tables and singletons in this file. It may be deprecated in the future when this
     * can be auto-generated.
     */
    id: number;
}
export interface TableDescriptorProtoMsg {
    typeUrl: "/cosmos.orm.v1.TableDescriptor";
    value: Uint8Array;
}
/**
 * TableDescriptor describes an ORM table.
 * @name TableDescriptorAmino
 * @package cosmos.orm.v1
 * @see proto type: cosmos.orm.v1.TableDescriptor
 */
export interface TableDescriptorAmino {
    /**
     * primary_key defines the primary key for the table.
     */
    primary_key?: PrimaryKeyDescriptorAmino;
    /**
     * index defines one or more secondary indexes.
     */
    index: SecondaryIndexDescriptorAmino[];
    /**
     * id is a non-zero integer ID that must be unique within the
     * tables and singletons in this file. It may be deprecated in the future when this
     * can be auto-generated.
     */
    id: number;
}
export interface TableDescriptorAminoMsg {
    type: "cosmos-sdk/TableDescriptor";
    value: TableDescriptorAmino;
}
/**
 * PrimaryKeyDescriptor describes a table primary key.
 * @name PrimaryKeyDescriptor
 * @package cosmos.orm.v1
 * @see proto type: cosmos.orm.v1.PrimaryKeyDescriptor
 */
export interface PrimaryKeyDescriptor {
    /**
     * fields is a comma-separated list of fields in the primary key. Spaces are
     * not allowed. Supported field types, their encodings, and any applicable constraints
     * are described below.
     *   - uint32 are encoded as 2,3,4 or 5 bytes using a compact encoding that
     *     is suitable for sorted iteration (not varint encoding). This type is
     *     well-suited for small integers.
     *   - uint64 are encoded as 2,4,6 or 9 bytes using a compact encoding that
     *     is suitable for sorted iteration (not varint encoding). This type is
     *     well-suited for small integers such as auto-incrementing sequences.
     *   - fixed32, fixed64 are encoded as big-endian fixed width bytes and support
     *   sorted iteration. These types are well-suited for encoding fixed with
     *   decimals as integers.
     *   - string's are encoded as raw bytes in terminal key segments and null-terminated
     *   in non-terminal segments. Null characters are thus forbidden in strings.
     *   string fields support sorted iteration.
     *   - bytes are encoded as raw bytes in terminal segments and length-prefixed
     *   with a 32-bit unsigned varint in non-terminal segments.
     *   - int32, sint32, int64, sint64, sfixed32, sfixed64 are encoded as fixed width bytes with
     *   an encoding that enables sorted iteration.
     *   - google.protobuf.Timestamp is encoded such that values with only seconds occupy 6 bytes,
     *   values including nanos occupy 9 bytes, and nil values occupy 1 byte. When iterating, nil
     *   values will always be ordered last. Seconds and nanos values must conform to the officially
     *   specified ranges of 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z and 0 to 999,999,999 respectively.
     *   - google.protobuf.Duration is encoded as 12 bytes using an encoding that enables sorted iteration.
     *   - enum fields are encoded using varint encoding and do not support sorted
     *   iteration.
     *   - bool fields are encoded as a single byte 0 or 1.
     *
     * All other fields types are unsupported in keys including repeated and
     * oneof fields.
     *
     * Primary keys are prefixed by the varint encoded table id and the byte 0x0
     * plus any additional prefix specified by the schema.
     */
    fields: string;
    /**
     * auto_increment specifies that the primary key is generated by an
     * auto-incrementing integer. If this is set to true fields must only
     * contain one field of that is of type uint64.
     */
    autoIncrement: boolean;
}
export interface PrimaryKeyDescriptorProtoMsg {
    typeUrl: "/cosmos.orm.v1.PrimaryKeyDescriptor";
    value: Uint8Array;
}
/**
 * PrimaryKeyDescriptor describes a table primary key.
 * @name PrimaryKeyDescriptorAmino
 * @package cosmos.orm.v1
 * @see proto type: cosmos.orm.v1.PrimaryKeyDescriptor
 */
export interface PrimaryKeyDescriptorAmino {
    /**
     * fields is a comma-separated list of fields in the primary key. Spaces are
     * not allowed. Supported field types, their encodings, and any applicable constraints
     * are described below.
     *   - uint32 are encoded as 2,3,4 or 5 bytes using a compact encoding that
     *     is suitable for sorted iteration (not varint encoding). This type is
     *     well-suited for small integers.
     *   - uint64 are encoded as 2,4,6 or 9 bytes using a compact encoding that
     *     is suitable for sorted iteration (not varint encoding). This type is
     *     well-suited for small integers such as auto-incrementing sequences.
     *   - fixed32, fixed64 are encoded as big-endian fixed width bytes and support
     *   sorted iteration. These types are well-suited for encoding fixed with
     *   decimals as integers.
     *   - string's are encoded as raw bytes in terminal key segments and null-terminated
     *   in non-terminal segments. Null characters are thus forbidden in strings.
     *   string fields support sorted iteration.
     *   - bytes are encoded as raw bytes in terminal segments and length-prefixed
     *   with a 32-bit unsigned varint in non-terminal segments.
     *   - int32, sint32, int64, sint64, sfixed32, sfixed64 are encoded as fixed width bytes with
     *   an encoding that enables sorted iteration.
     *   - google.protobuf.Timestamp is encoded such that values with only seconds occupy 6 bytes,
     *   values including nanos occupy 9 bytes, and nil values occupy 1 byte. When iterating, nil
     *   values will always be ordered last. Seconds and nanos values must conform to the officially
     *   specified ranges of 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z and 0 to 999,999,999 respectively.
     *   - google.protobuf.Duration is encoded as 12 bytes using an encoding that enables sorted iteration.
     *   - enum fields are encoded using varint encoding and do not support sorted
     *   iteration.
     *   - bool fields are encoded as a single byte 0 or 1.
     *
     * All other fields types are unsupported in keys including repeated and
     * oneof fields.
     *
     * Primary keys are prefixed by the varint encoded table id and the byte 0x0
     * plus any additional prefix specified by the schema.
     */
    fields: string;
    /**
     * auto_increment specifies that the primary key is generated by an
     * auto-incrementing integer. If this is set to true fields must only
     * contain one field of that is of type uint64.
     */
    auto_increment: boolean;
}
export interface PrimaryKeyDescriptorAminoMsg {
    type: "cosmos-sdk/PrimaryKeyDescriptor";
    value: PrimaryKeyDescriptorAmino;
}
/**
 * PrimaryKeyDescriptor describes a table secondary index.
 * @name SecondaryIndexDescriptor
 * @package cosmos.orm.v1
 * @see proto type: cosmos.orm.v1.SecondaryIndexDescriptor
 */
export interface SecondaryIndexDescriptor {
    /**
     * fields is a comma-separated list of fields in the index. The supported
     * field types are the same as those for PrimaryKeyDescriptor.fields.
     * Index keys are prefixed by the varint encoded table id and the varint
     * encoded index id plus any additional prefix specified by the schema.
     *
     * In addition the field segments, non-unique index keys are suffixed with
     * any additional primary key fields not present in the index fields so that the
     * primary key can be reconstructed. Unique indexes instead of being suffixed
     * store the remaining primary key fields in the value..
     */
    fields: string;
    /**
     * id is a non-zero integer ID that must be unique within the indexes for this
     * table and less than 32768. It may be deprecated in the future when this can
     * be auto-generated.
     */
    id: number;
    /**
     * unique specifies that this an unique index.
     */
    unique: boolean;
}
export interface SecondaryIndexDescriptorProtoMsg {
    typeUrl: "/cosmos.orm.v1.SecondaryIndexDescriptor";
    value: Uint8Array;
}
/**
 * PrimaryKeyDescriptor describes a table secondary index.
 * @name SecondaryIndexDescriptorAmino
 * @package cosmos.orm.v1
 * @see proto type: cosmos.orm.v1.SecondaryIndexDescriptor
 */
export interface SecondaryIndexDescriptorAmino {
    /**
     * fields is a comma-separated list of fields in the index. The supported
     * field types are the same as those for PrimaryKeyDescriptor.fields.
     * Index keys are prefixed by the varint encoded table id and the varint
     * encoded index id plus any additional prefix specified by the schema.
     *
     * In addition the field segments, non-unique index keys are suffixed with
     * any additional primary key fields not present in the index fields so that the
     * primary key can be reconstructed. Unique indexes instead of being suffixed
     * store the remaining primary key fields in the value..
     */
    fields: string;
    /**
     * id is a non-zero integer ID that must be unique within the indexes for this
     * table and less than 32768. It may be deprecated in the future when this can
     * be auto-generated.
     */
    id: number;
    /**
     * unique specifies that this an unique index.
     */
    unique: boolean;
}
export interface SecondaryIndexDescriptorAminoMsg {
    type: "cosmos-sdk/SecondaryIndexDescriptor";
    value: SecondaryIndexDescriptorAmino;
}
/**
 * TableDescriptor describes an ORM singleton table which has at most one instance.
 * @name SingletonDescriptor
 * @package cosmos.orm.v1
 * @see proto type: cosmos.orm.v1.SingletonDescriptor
 */
export interface SingletonDescriptor {
    /**
     * id is a non-zero integer ID that must be unique within the
     * tables and singletons in this file. It may be deprecated in the future when this
     * can be auto-generated.
     */
    id: number;
}
export interface SingletonDescriptorProtoMsg {
    typeUrl: "/cosmos.orm.v1.SingletonDescriptor";
    value: Uint8Array;
}
/**
 * TableDescriptor describes an ORM singleton table which has at most one instance.
 * @name SingletonDescriptorAmino
 * @package cosmos.orm.v1
 * @see proto type: cosmos.orm.v1.SingletonDescriptor
 */
export interface SingletonDescriptorAmino {
    /**
     * id is a non-zero integer ID that must be unique within the
     * tables and singletons in this file. It may be deprecated in the future when this
     * can be auto-generated.
     */
    id: number;
}
export interface SingletonDescriptorAminoMsg {
    type: "cosmos-sdk/SingletonDescriptor";
    value: SingletonDescriptorAmino;
}
/**
 * TableDescriptor describes an ORM table.
 * @name TableDescriptor
 * @package cosmos.orm.v1
 * @see proto type: cosmos.orm.v1.TableDescriptor
 */
export declare const TableDescriptor: {
    typeUrl: string;
    aminoType: string;
    is(o: any): o is TableDescriptor;
    isAmino(o: any): o is TableDescriptorAmino;
    encode(message: TableDescriptor, writer?: BinaryWriter): BinaryWriter;
    decode(input: BinaryReader | Uint8Array, length?: number): TableDescriptor;
    fromPartial(object: DeepPartial<TableDescriptor>): TableDescriptor;
    fromAmino(object: TableDescriptorAmino): TableDescriptor;
    toAmino(message: TableDescriptor): TableDescriptorAmino;
    fromAminoMsg(object: TableDescriptorAminoMsg): TableDescriptor;
    toAminoMsg(message: TableDescriptor): TableDescriptorAminoMsg;
    fromProtoMsg(message: TableDescriptorProtoMsg): TableDescriptor;
    toProto(message: TableDescriptor): Uint8Array;
    toProtoMsg(message: TableDescriptor): TableDescriptorProtoMsg;
    registerTypeUrl(): void;
};
/**
 * PrimaryKeyDescriptor describes a table primary key.
 * @name PrimaryKeyDescriptor
 * @package cosmos.orm.v1
 * @see proto type: cosmos.orm.v1.PrimaryKeyDescriptor
 */
export declare const PrimaryKeyDescriptor: {
    typeUrl: string;
    aminoType: string;
    is(o: any): o is PrimaryKeyDescriptor;
    isAmino(o: any): o is PrimaryKeyDescriptorAmino;
    encode(message: PrimaryKeyDescriptor, writer?: BinaryWriter): BinaryWriter;
    decode(input: BinaryReader | Uint8Array, length?: number): PrimaryKeyDescriptor;
    fromPartial(object: DeepPartial<PrimaryKeyDescriptor>): PrimaryKeyDescriptor;
    fromAmino(object: PrimaryKeyDescriptorAmino): PrimaryKeyDescriptor;
    toAmino(message: PrimaryKeyDescriptor): PrimaryKeyDescriptorAmino;
    fromAminoMsg(object: PrimaryKeyDescriptorAminoMsg): PrimaryKeyDescriptor;
    toAminoMsg(message: PrimaryKeyDescriptor): PrimaryKeyDescriptorAminoMsg;
    fromProtoMsg(message: PrimaryKeyDescriptorProtoMsg): PrimaryKeyDescriptor;
    toProto(message: PrimaryKeyDescriptor): Uint8Array;
    toProtoMsg(message: PrimaryKeyDescriptor): PrimaryKeyDescriptorProtoMsg;
    registerTypeUrl(): void;
};
/**
 * PrimaryKeyDescriptor describes a table secondary index.
 * @name SecondaryIndexDescriptor
 * @package cosmos.orm.v1
 * @see proto type: cosmos.orm.v1.SecondaryIndexDescriptor
 */
export declare const SecondaryIndexDescriptor: {
    typeUrl: string;
    aminoType: string;
    is(o: any): o is SecondaryIndexDescriptor;
    isAmino(o: any): o is SecondaryIndexDescriptorAmino;
    encode(message: SecondaryIndexDescriptor, writer?: BinaryWriter): BinaryWriter;
    decode(input: BinaryReader | Uint8Array, length?: number): SecondaryIndexDescriptor;
    fromPartial(object: DeepPartial<SecondaryIndexDescriptor>): SecondaryIndexDescriptor;
    fromAmino(object: SecondaryIndexDescriptorAmino): SecondaryIndexDescriptor;
    toAmino(message: SecondaryIndexDescriptor): SecondaryIndexDescriptorAmino;
    fromAminoMsg(object: SecondaryIndexDescriptorAminoMsg): SecondaryIndexDescriptor;
    toAminoMsg(message: SecondaryIndexDescriptor): SecondaryIndexDescriptorAminoMsg;
    fromProtoMsg(message: SecondaryIndexDescriptorProtoMsg): SecondaryIndexDescriptor;
    toProto(message: SecondaryIndexDescriptor): Uint8Array;
    toProtoMsg(message: SecondaryIndexDescriptor): SecondaryIndexDescriptorProtoMsg;
    registerTypeUrl(): void;
};
/**
 * TableDescriptor describes an ORM singleton table which has at most one instance.
 * @name SingletonDescriptor
 * @package cosmos.orm.v1
 * @see proto type: cosmos.orm.v1.SingletonDescriptor
 */
export declare const SingletonDescriptor: {
    typeUrl: string;
    aminoType: string;
    is(o: any): o is SingletonDescriptor;
    isAmino(o: any): o is SingletonDescriptorAmino;
    encode(message: SingletonDescriptor, writer?: BinaryWriter): BinaryWriter;
    decode(input: BinaryReader | Uint8Array, length?: number): SingletonDescriptor;
    fromPartial(object: DeepPartial<SingletonDescriptor>): SingletonDescriptor;
    fromAmino(object: SingletonDescriptorAmino): SingletonDescriptor;
    toAmino(message: SingletonDescriptor): SingletonDescriptorAmino;
    fromAminoMsg(object: SingletonDescriptorAminoMsg): SingletonDescriptor;
    toAminoMsg(message: SingletonDescriptor): SingletonDescriptorAminoMsg;
    fromProtoMsg(message: SingletonDescriptorProtoMsg): SingletonDescriptor;
    toProto(message: SingletonDescriptor): Uint8Array;
    toProtoMsg(message: SingletonDescriptor): SingletonDescriptorProtoMsg;
    registerTypeUrl(): void;
};
