import { HamokCodec } from '../common/HamokCodec';
import { EntryUpdatedNotification, UpdateEntriesNotification, UpdateEntriesRequest, UpdateEntriesResponse } from './messagetypes/UpdateEntries';
import { HamokMessage as Message } from './HamokMessage';
import { ClearEntriesNotification, ClearEntriesRequest, ClearEntriesResponse } from './messagetypes/ClearEntries';
import { GetEntriesRequest, GetEntriesResponse } from './messagetypes/GetEntries';
import { GetKeysRequest, GetKeysResponse } from './messagetypes/GetKeys';
import { DeleteEntriesNotification, DeleteEntriesRequest, DeleteEntriesResponse } from './messagetypes/DeleteEntries';
import { EntriesRemovedNotification, RemoveEntriesNotification, RemoveEntriesRequest, RemoveEntriesResponse } from './messagetypes/RemoveEntries';
import { EntriesInsertedNotification, InsertEntriesNotification, InsertEntriesRequest, InsertEntriesResponse } from './messagetypes/InsertEntries';
import { GetSizeRequest, GetSizeResponse } from './messagetypes/GetSize';
import { StorageAppliedCommitNotification } from './messagetypes/StorageAppliedCommit';
import { StorageHelloNotification } from './messagetypes/StorageHelloNotification';
import { StorageStateNotification } from './messagetypes/StorageStateNotification';
type Input<K, V> = ClearEntriesNotification | ClearEntriesRequest | ClearEntriesResponse | GetEntriesRequest<K> | GetEntriesResponse<K, V> | GetKeysRequest | GetKeysResponse<K> | GetSizeRequest | GetSizeResponse | DeleteEntriesNotification<K> | DeleteEntriesRequest<K> | DeleteEntriesResponse<K> | RemoveEntriesNotification<K> | RemoveEntriesRequest<K> | RemoveEntriesResponse<K, V> | EntriesRemovedNotification<K, V> | InsertEntriesNotification<K, V> | InsertEntriesRequest<K, V> | InsertEntriesResponse<K, V> | EntriesInsertedNotification<K, V> | UpdateEntriesNotification<K, V> | UpdateEntriesRequest<K, V> | UpdateEntriesResponse<K, V> | EntryUpdatedNotification<K, V> | StorageAppliedCommitNotification | StorageHelloNotification | StorageStateNotification;
export type StorageCodecMessageMap<K, V> = {
    ClearEntriesRequest: ClearEntriesRequest;
    ClearEntriesResponse: ClearEntriesResponse;
    ClearEntriesNotification: ClearEntriesNotification;
    GetEntriesRequest: GetEntriesRequest<K>;
    GetEntriesResponse: GetEntriesResponse<K, V>;
    GetKeysRequest: GetKeysRequest;
    GetKeysResponse: GetKeysResponse<K>;
    GetSizeRequest: GetSizeRequest;
    GetSizeResponse: GetSizeResponse;
    DeleteEntriesRequest: DeleteEntriesRequest<K>;
    DeleteEntriesResponse: DeleteEntriesResponse<K>;
    DeleteEntriesNotification: DeleteEntriesNotification<K>;
    RemoveEntriesRequest: RemoveEntriesRequest<K>;
    RemoveEntriesResponse: RemoveEntriesResponse<K, V>;
    RemoveEntriesNotification: RemoveEntriesNotification<K>;
    EntriesRemovedNotification: EntriesRemovedNotification<K, V>;
    InsertEntriesRequest: InsertEntriesRequest<K, V>;
    InsertEntriesResponse: InsertEntriesResponse<K, V>;
    InsertEntriesNotification: InsertEntriesNotification<K, V>;
    EntriesInsertedNotification: EntriesInsertedNotification<K, V>;
    UpdateEntriesRequest: UpdateEntriesRequest<K, V>;
    UpdateEntriesResponse: UpdateEntriesResponse<K, V>;
    UpdateEntriesNotification: UpdateEntriesNotification<K, V>;
    EntryUpdatedNotification: EntryUpdatedNotification<K, V>;
    StorageAppliedCommitNotification: StorageAppliedCommitNotification;
    StorageHelloNotification: StorageHelloNotification;
    StorageStateNotification: StorageStateNotification;
};
export declare class StorageCodec<K, V> implements HamokCodec<Input<K, V>, Message> {
    readonly keyCodec: HamokCodec<K, Uint8Array>;
    readonly valueCodec: HamokCodec<V, Uint8Array>;
    private static readonly strCodec;
    constructor(keyCodec: HamokCodec<K, Uint8Array>, valueCodec: HamokCodec<V, Uint8Array>);
    encode(input: Input<K, V>, callback?: <U extends keyof StorageCodecMessageMap<K, V>>(type: U, message: Message) => void): Message;
    decode(message: Message, callback?: <U extends keyof StorageCodecMessageMap<K, V>>(type: U, output: StorageCodecMessageMap<K, V>[U]) => void): Input<K, V>;
    encodeStorageHelloNotification(notification: StorageHelloNotification): Message;
    decodeStorageHelloNotification(message: Message): StorageHelloNotification;
    encodeStorageStateNotification(storageState: StorageStateNotification): Message;
    decodeStorageStateNotification(message: Message): StorageStateNotification;
    encodeClearEntriesRequest(request: ClearEntriesRequest): Message;
    decodeClearEntriesRequest(message: Message): ClearEntriesRequest;
    encodeClearEntriesResponse(response: ClearEntriesResponse): Message;
    decodeClearEntriesResponse(message: Message): ClearEntriesResponse;
    encodeClearEntriesNotification(notification: ClearEntriesNotification): Message;
    decodeClearEntriesNotification(message: Message): ClearEntriesNotification;
    encodeGetEntriesRequest(request: GetEntriesRequest<K>): Message;
    decodeGetEntriesRequest(message: Message): GetEntriesRequest<K>;
    encodeGetEntriesResponse(response: GetEntriesResponse<K, V>): Message;
    decodeGetEntriesResponse(message: Message): GetEntriesResponse<K, V>;
    encodeGetSizeRequest(request: GetSizeRequest): Message;
    decodeGetSizeRequest(message: Message): GetSizeRequest;
    encodeGetSizeResponse(response: GetSizeResponse): Message;
    decodeGetSizeResponse(message: Message): GetSizeResponse;
    encodeGetKeysRequest(request: GetKeysRequest): Message;
    decodeGetKeysRequest(message: Message): GetKeysRequest;
    encodeGetKeysResponse(response: GetKeysResponse<K>): Message;
    decodeGetKeysResponse(message: Message): GetKeysResponse<K>;
    encodeDeleteEntriesRequest(request: DeleteEntriesRequest<K>): Message;
    decodeDeleteEntriesRequest(message: Message): DeleteEntriesRequest<K>;
    encodeDeleteEntriesResponse(response: DeleteEntriesResponse<K>): Message;
    decodeDeleteEntriesResponse(message: Message): DeleteEntriesResponse<K>;
    encodeDeleteEntriesNotification(notification: DeleteEntriesNotification<K>): Message;
    decodeDeleteEntriesNotification(message: Message): DeleteEntriesNotification<K>;
    encodeRemoveEntriesRequest(request: RemoveEntriesRequest<K>): Message;
    decodeRemoveEntriesRequest(message: Message): RemoveEntriesRequest<K>;
    encodeRemoveEntriesResponse(response: RemoveEntriesResponse<K, V>): Message;
    decodeRemoveEntriesResponse(message: Message): RemoveEntriesResponse<K, V>;
    encodeRemoveEntriesNotification(notification: RemoveEntriesNotification<K>): Message;
    decodeRemoveEntriesNotification(message: Message): RemoveEntriesNotification<K>;
    encodeEntriesRemovedNotification(notification: EntriesRemovedNotification<K, V>): Message;
    decodeEntriesRemovedNotification(message: Message): EntriesRemovedNotification<K, V>;
    encodeInsertEntriesRequest(request: InsertEntriesRequest<K, V>): Message;
    decodeInsertEntriesRequest(message: Message): InsertEntriesRequest<K, V>;
    encodeInsertEntriesResponse(response: InsertEntriesResponse<K, V>): Message;
    decodeInsertEntriesResponse(message: Message): InsertEntriesResponse<K, V>;
    encodeInsertEntriesNotification(notification: InsertEntriesNotification<K, V>): Message;
    decodeInsertEntriesNotification(message: Message): InsertEntriesNotification<K, V>;
    encodeEntriesInsertedNotification(notification: EntriesInsertedNotification<K, V>): Message;
    decodeEntriesInsertedNotification(message: Message): EntriesInsertedNotification<K, V>;
    encodeUpdateEntriesRequest(request: UpdateEntriesRequest<K, V>): Message;
    decodeUpdateEntriesRequest(message: Message): UpdateEntriesRequest<K, V>;
    encodeUpdateEntriesResponse(response: UpdateEntriesResponse<K, V>): Message;
    decodeUpdateEntriesResponse(message: Message): UpdateEntriesResponse<K, V>;
    encodeUpdateEntriesNotification(notification: UpdateEntriesNotification<K, V>): Message;
    decodeUpdateEntriesNotification(message: Message): UpdateEntriesNotification<K, V>;
    encodeEntryUpdatedNotification(notification: EntryUpdatedNotification<K, V>): Message;
    decodeEntryUpdatedNotification(message: Message): EntryUpdatedNotification<K, V>;
    encodeStorageAppliedCommitNotification(notification: StorageAppliedCommitNotification): Message;
    decodeStorageAppliedCommitNotification(message: Message): StorageAppliedCommitNotification;
    encodeKeys(keys: ReadonlySet<K>): Uint8Array[];
    decodeKeys(keys: Uint8Array[]): ReadonlySet<K>;
    encodeEntries(entries: ReadonlyMap<K, V>): [keys: Uint8Array[], values: Uint8Array[]];
    decodeEntries(keys: Uint8Array[], values: Uint8Array[]): ReadonlyMap<K, V>;
}
export {};
//# sourceMappingURL=StorageCodec.d.ts.map