Rust serde_json сериализатор для красивой печати [u8; 32]
Я хочу получить красивую печать в Rust для [u8; 32]
, с serde_json
, но не могу заставить его работать. Я знаю, является ли следующая структура (Vec<u8>)
Работает, как эта игровая площадка. Но я должен сохранить структуру ([u8; 32]), потому что она везде в существующем проекте. Может ли кто-нибудь помочь сделать это для массива вместо Vec?
#[derive(Serialize, Deserialize)]
struct OneFactor(
#[serde(
serialize_with = "buffer_to_hex",
deserialize_with = "hex_to_buffer"
)]
[u8; 32],
);
/// Serializes `buffer` to a lowercase hex string.
pub fn buffer_to_hex<T, S>(buffer: &T, serializer: S) -> Result<S::Ok, S::Error>
where
T: AsRef<[u8]>,
S: Serializer,
{
serializer.serialize_str(&buffer.as_ref().to_hex())
}
/// Deserializes a lowercase hex string to a `Vec<u8>`.
pub fn hex_to_buffer<'de, D>(deserializer: D) -> Result<Vec<u8>, D::Error>
where
D: Deserializer<'de>,
{
use serde::de::Error;
String::deserialize(deserializer)
.and_then(|string| Vec::from_hex(&string).map_err(|err| Error::custom(err.to_string())))
}
fn print_an_factor() -> Result<(), Error> {
let factor = OneFactor([
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
26, 27, 28, 29, 30, 31, 32,
]);
// Serialize it to a JSON string.
let j = serde_json::to_string_pretty(&factor)?;
// Print, write to a file, or send to an HTTP server.
println!("{}", j);
Ok(())
}
fn main() {
print_an_factor().unwrap();
}
И я поместил полный код в Rust Playground для вашей легкой проверки.
[Обновить]
Я разрабатываю версию, которая работает для to_hex()
направление, код здесь. Но обратное направление from_hex()
все еще нужна помощь ~