use std::io::{self, Write};
use kevy_resp::Argv;
use crate::rewrite_fmt::emit;
const REWRITE_ITEMS_PER_CMD: usize = 64;
const REWRITE_BYTES_PER_CMD: usize = 256 << 20;
pub(crate) fn write_verb_items<W: Write>(
w: &mut W,
verb: &[u8],
key: &[u8],
unit: usize,
items: impl IntoIterator<Item = Vec<u8>>,
fmt: crate::AofFormat,
scratch: &mut Vec<u8>,
) -> io::Result<()> {
let unit = unit.max(1);
let mut it = items.into_iter().peekable();
while it.peek().is_some() {
let mut argv: Vec<Vec<u8>> = Vec::with_capacity(2 + REWRITE_ITEMS_PER_CMD * unit);
argv.push(verb.to_vec());
argv.push(key.to_vec());
let mut bytes = 0usize;
let mut units = 0usize;
while units < REWRITE_ITEMS_PER_CMD && bytes < REWRITE_BYTES_PER_CMD {
if it.peek().is_none() {
break;
}
for _ in 0..unit {
let Some(item) = it.next() else { break };
bytes += item.len();
argv.push(item);
}
units += 1;
}
emit(w, &Argv::from(argv), fmt, scratch)?;
}
Ok(())
}