From 4a0859beeb73b25e0bc8eef691eec15ad738a63d Mon Sep 17 00:00:00 2001 From: Jason Ish Date: Thu, 8 Sep 2022 10:41:10 -0600 Subject: [PATCH] jsonbuilder: add append_hex - add hex to array New method, append_hex to add a byte array to a JSON array in hex encoding. --- rust/src/jsonbuilder.rs | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) 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() {