(v: Val, spec: &str, heap: &HeapPool)
| 15 | } |
| 16 | |
| 17 | pub fn format_value(v: Val, spec: &str, heap: &HeapPool) -> Result<String, &'static str> { |
| 18 | if spec.is_empty() { |
| 19 | return Ok(display_inline(v, heap)); |
| 20 | } |
| 21 | let parsed = parse_spec(spec)?; |
| 22 | // Cap against the heap budget; precision also below core::fmt's u16 abort threshold (panics at >= 65535). |
| 23 | const PRECISION_MAX: usize = 65_000; |
| 24 | if parsed.width > heap.limit() { return Err("format width exceeds limit"); } |
| 25 | if parsed.precision.is_some_and(|p| p > heap.limit().min(PRECISION_MAX)) { return Err("format precision exceeds limit"); } |
| 26 | apply(v, &parsed, heap) |
| 27 | } |
| 28 | |
| 29 | #[derive(Default, Clone)] |
| 30 | struct Spec { |
no test coverage detected