mirror of
https://git.proxmox.com/git/proxmox
synced 2025-05-03 23:50:56 +00:00
src/serde.rs: add serde helpers
This commit is contained in:
parent
adb425aeb2
commit
d966061f54
@ -12,6 +12,9 @@ endian_trait = { version = "0.6", features = ["arrays"] }
|
|||||||
libc = "0.2"
|
libc = "0.2"
|
||||||
valgrind_request = { version = "1.1.0", optional = true }
|
valgrind_request = { version = "1.1.0", optional = true }
|
||||||
failure = "0.1"
|
failure = "0.1"
|
||||||
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
|
base64 = "0.10"
|
||||||
|
chrono = "0.4"
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = [ "valgrind" ]
|
default = [ "valgrind" ]
|
||||||
|
@ -4,6 +4,7 @@ use failure::*;
|
|||||||
|
|
||||||
pub mod io;
|
pub mod io;
|
||||||
pub mod vec;
|
pub mod vec;
|
||||||
|
pub mod serde;
|
||||||
|
|
||||||
/// Evaluates to the offset (in bytes) of a given member within a struct
|
/// Evaluates to the offset (in bytes) of a given member within a struct
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
|
51
proxmox-tools/src/serde.rs
Normal file
51
proxmox-tools/src/serde.rs
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
//! Serialization helpers for serde
|
||||||
|
|
||||||
|
/// Sertialize DateTime<Local> as RFC3339
|
||||||
|
pub mod date_time_as_rfc3339 {
|
||||||
|
|
||||||
|
use chrono::{Local, DateTime};
|
||||||
|
use serde::{Serializer, Deserializer, Deserialize};
|
||||||
|
|
||||||
|
pub fn serialize<S>(time: &DateTime<Local>, serializer: S) -> Result<S::Ok, S::Error>
|
||||||
|
where S: Serializer,
|
||||||
|
{
|
||||||
|
serializer.serialize_str(&time.to_rfc3339())
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn deserialize<'de, D>(deserializer: D) -> Result<DateTime<Local>, D::Error>
|
||||||
|
where D: Deserializer<'de>
|
||||||
|
{
|
||||||
|
use serde::de::Error;
|
||||||
|
String::deserialize(deserializer)
|
||||||
|
.and_then(|string| {
|
||||||
|
string.parse::<DateTime<Local>>()
|
||||||
|
.map_err(|err| Error::custom(err.to_string()))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// Serialize Vec<u8> as base64 encoded string.
|
||||||
|
pub mod bytes_as_base64 {
|
||||||
|
|
||||||
|
use base64;
|
||||||
|
use serde::{Serializer,Deserializer, Deserialize};
|
||||||
|
|
||||||
|
pub fn serialize<S, T>(data: &T, serializer: S) -> Result<S::Ok, S::Error>
|
||||||
|
where T: AsRef<[u8]>,
|
||||||
|
S: Serializer,
|
||||||
|
{
|
||||||
|
serializer.serialize_str(&base64::encode(data.as_ref()))
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn deserialize<'de, D>(deserializer: D) -> Result<Vec<u8>, D::Error>
|
||||||
|
where D: Deserializer<'de>
|
||||||
|
{
|
||||||
|
use serde::de::Error;
|
||||||
|
String::deserialize(deserializer)
|
||||||
|
.and_then(|string| {
|
||||||
|
base64::decode(&string)
|
||||||
|
.map_err(|err| Error::custom(err.to_string()))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user