mirror of
https://git.proxmox.com/git/proxmox
synced 2025-05-03 00:31:05 +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"
|
||||
valgrind_request = { version = "1.1.0", optional = true }
|
||||
failure = "0.1"
|
||||
serde = { version = "1.0", features = ["derive"] }
|
||||
base64 = "0.10"
|
||||
chrono = "0.4"
|
||||
|
||||
[features]
|
||||
default = [ "valgrind" ]
|
||||
|
@ -4,6 +4,7 @@ use failure::*;
|
||||
|
||||
pub mod io;
|
||||
pub mod vec;
|
||||
pub mod serde;
|
||||
|
||||
/// Evaluates to the offset (in bytes) of a given member within a struct
|
||||
#[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