diff --git a/rust/src/jsonbuilder.rs b/rust/src/jsonbuilder.rs index e3d47dad92..721e90844a 100644 --- a/rust/src/jsonbuilder.rs +++ b/rust/src/jsonbuilder.rs @@ -328,6 +328,36 @@ impl JsonBuilder { } } + /// Add a byte array to a JSON array encoded as hex. + pub fn append_hex(&mut self, val: &[u8]) -> Result<&mut Self, JsonError> { + match self.current_state() { + State::ArrayFirst => { + self.buf.push('"'); + for i in 0..val.len() { + self.buf.push(HEX[(val[i] >> 4) as usize] as char); + self.buf.push(HEX[(val[i] & 0xf) as usize] as char); + } + self.buf.push('"'); + self.set_state(State::ArrayNth); + Ok(self) + } + State::ArrayNth => { + self.buf.push(','); + self.buf.push('"'); + for i in 0..val.len() { + self.buf.push(HEX[(val[i] >> 4) as usize] as char); + self.buf.push(HEX[(val[i] & 0xf) as usize] as char); + } + self.buf.push('"'); + Ok(self) + } + _ => { + debug_validate_fail!("invalid state"); + Err(JsonError::InvalidState) + } + } + } + /// Add an unsigned integer to an array. pub fn append_uint(&mut self, val: u64) -> Result<&mut Self, JsonError> { match self.current_state() {