mirror of
https://github.com/openai/codex.git
synced 2026-11-03 19:53:25 +00:00
## Why History estimation and executed-tool-call limits only need the size of serialized JSON, not the serialized output itself. ## What changed - Add a shared `serialized_json_bytes` helper that streams JSON into a byte counter. - Use it for response-item size estimates and executed-tool-call argument limits. - Preserve serialization errors so callers can apply their existing fallback behavior. ## Testing - Cover response-item sizing with escaped characters, newlines, and multibyte text. GitOrigin-RevId: a4417996df96df5c51cae62830adc496912f69c7
23 lines
624 B
Rust
23 lines
624 B
Rust
#[derive(Default)]
|
|
struct JsonByteCounter(usize);
|
|
|
|
impl std::io::Write for JsonByteCounter {
|
|
fn write(&mut self, bytes: &[u8]) -> std::io::Result<usize> {
|
|
self.0 = self.0.saturating_add(bytes.len());
|
|
Ok(bytes.len())
|
|
}
|
|
|
|
fn flush(&mut self) -> std::io::Result<()> {
|
|
Ok(())
|
|
}
|
|
}
|
|
|
|
/// Counts serialized JSON bytes without retaining the serialized output.
|
|
pub(crate) fn serialized_json_bytes<T: serde::Serialize + ?Sized>(
|
|
value: &T,
|
|
) -> serde_json::Result<usize> {
|
|
let mut counter = JsonByteCounter::default();
|
|
serde_json::to_writer(&mut counter, value)?;
|
|
Ok(counter.0)
|
|
}
|