import { CommandParser } from '../client/parser';
import { RedisArgument, ArrayReply, BlobStringReply, NullReply } from '../RESP/types';
import { ListSide } from './generic-transformers';
/**
 * Ordering of the moved elements at the destination.
 *
 * - `OBO` (one-by-one): push each element as it is popped, reversing the
 *   moved block's relative order (stack semantics).
 * - `BULK`: preserve the moved block's original relative order (queue semantics).
 */
export type LMoveMOrder = 'OBO' | 'BULK';
export type LMoveMOptions = {
    /** Move up to `COUNT` elements (fewer if the source has fewer). */
    COUNT: number;
    ORDER: LMoveMOrder;
} | {
    /** Move exactly `EXACTLY` elements; if the source has fewer, move nothing and reply with null. */
    EXACTLY: number;
    ORDER: LMoveMOrder;
};
/**
 * Pushes the trailing `[<COUNT|EXACTLY> count <OBO|BULK>]` arguments shared by
 * LMOVEM and BLMOVEM. Kept separate from the command bodies because BLMOVEM's
 * `timeout` sits between the sides and these options, so only the tail is shared.
 * `ORDER` is required whenever the block is present: Redis rejects the trailer
 * without it as a syntax error.
 */
export declare function parseLMoveMOptions(parser: CommandParser, options?: LMoveMOptions): void;
declare const _default: {
    readonly IS_READ_ONLY: false;
    readonly parseCommand: (this: void, parser: CommandParser, source: RedisArgument, destination: RedisArgument, sourceSide: ListSide, destinationSide: ListSide, options?: LMoveMOptions) => void;
    readonly transformReply: () => ArrayReply<BlobStringReply> | NullReply;
};
export default _default;
//# sourceMappingURL=LMOVEM.d.ts.map