MCPcopy Create free account
hub / github.com/apache/arrow-rs / decode_hex_to_writer

Function decode_hex_to_writer

arrow-json/src/reader/binary_array.rs:45–83  ·  view source on GitHub ↗
(hex_string: &str, writer: &mut W)

Source from the content-addressed store, hash-verified

43}
44
45fn decode_hex_to_writer<W: Write>(hex_string: &str, writer: &mut W) -> Result<(), ArrowError> {
46 let bytes = hex_string.as_bytes();
47 let mut iter = bytes.chunks_exact(2);
48 let mut buffer = [0u8; 64];
49 let mut buffered = 0;
50
51 for (pair_index, pair) in (&mut iter).enumerate() {
52 let base = pair_index * 2;
53 let high = decode_hex_digit(pair[0]).ok_or_else(|| invalid_hex_error_at(base, pair[0]))?;
54 let low =
55 decode_hex_digit(pair[1]).ok_or_else(|| invalid_hex_error_at(base + 1, pair[1]))?;
56 buffer[buffered] = (high << 4) | low;
57 buffered += 1;
58
59 if buffered == buffer.len() {
60 writer
61 .write_all(&buffer)
62 .map_err(|e| ArrowError::JsonError(format!("failed to write binary data: {e}")))?;
63 buffered = 0;
64 }
65 }
66
67 let remainder = iter.remainder();
68 if !remainder.is_empty() {
69 let index = (bytes.len() / 2) * 2;
70 let low = decode_hex_digit(remainder[0])
71 .ok_or_else(|| invalid_hex_error_at(index, remainder[0]))?;
72 buffer[buffered] = low;
73 buffered += 1;
74 }
75
76 if buffered > 0 {
77 writer
78 .write_all(&buffer[..buffered])
79 .map_err(|e| ArrowError::JsonError(format!("failed to write binary data: {e}")))?;
80 }
81
82 Ok(())
83}
84
85#[derive(Default)]
86pub struct BinaryArrayDecoder<O: OffsetSizeTrait> {

Callers 4

decodeMethod · 0.85

Calls 6

decode_hex_digitFunction · 0.85
invalid_hex_error_atFunction · 0.85
as_bytesMethod · 0.45
lenMethod · 0.45
write_allMethod · 0.45
is_emptyMethod · 0.45