(bytes: &[u8], sep: u8, bytes_per_sep: isize)
| 1153 | } |
| 1154 | |
| 1155 | fn hex_impl(bytes: &[u8], sep: u8, bytes_per_sep: isize) -> String { |
| 1156 | let len = bytes.len(); |
| 1157 | |
| 1158 | let buf = if bytes_per_sep < 0 { |
| 1159 | let bytes_per_sep = core::cmp::min(len, (-bytes_per_sep) as usize); |
| 1160 | let chunks = (len - 1) / bytes_per_sep; |
| 1161 | let chunked = chunks * bytes_per_sep; |
| 1162 | let unchunked = len - chunked; |
| 1163 | let mut buf = vec![0; len * 2 + chunks]; |
| 1164 | let mut j = 0; |
| 1165 | for i in (0..chunks).map(|i| i * bytes_per_sep) { |
| 1166 | hex::encode_to_slice( |
| 1167 | &bytes[i..i + bytes_per_sep], |
| 1168 | &mut buf[j..j + bytes_per_sep * 2], |
| 1169 | ) |
| 1170 | .unwrap(); |
| 1171 | j += bytes_per_sep * 2; |
| 1172 | buf[j] = sep; |
| 1173 | j += 1; |
| 1174 | } |
| 1175 | hex::encode_to_slice(&bytes[chunked..], &mut buf[j..j + unchunked * 2]).unwrap(); |
| 1176 | buf |
| 1177 | } else { |
| 1178 | let bytes_per_sep = core::cmp::min(len, bytes_per_sep as usize); |
| 1179 | let chunks = (len - 1) / bytes_per_sep; |
| 1180 | let chunked = chunks * bytes_per_sep; |
| 1181 | let unchunked = len - chunked; |
| 1182 | let mut buf = vec![0; len * 2 + chunks]; |
| 1183 | hex::encode_to_slice(&bytes[..unchunked], &mut buf[..unchunked * 2]).unwrap(); |
| 1184 | let mut j = unchunked * 2; |
| 1185 | for i in (0..chunks).map(|i| i * bytes_per_sep + unchunked) { |
| 1186 | buf[j] = sep; |
| 1187 | j += 1; |
| 1188 | hex::encode_to_slice( |
| 1189 | &bytes[i..i + bytes_per_sep], |
| 1190 | &mut buf[j..j + bytes_per_sep * 2], |
| 1191 | ) |
| 1192 | .unwrap(); |
| 1193 | j += bytes_per_sep * 2; |
| 1194 | } |
| 1195 | buf |
| 1196 | }; |
| 1197 | |
| 1198 | unsafe { String::from_utf8_unchecked(buf) } |
| 1199 | } |
| 1200 | |
| 1201 | pub fn bytes_to_hex( |
| 1202 | bytes: &[u8], |
no test coverage detected