827c13b69e
dont build netstack in CI additional rust 2024 fixes fixes removed temp.rs first round of cleanup removed duplicated NS types moved gateway probe to the monorepo
86 lines
2.9 KiB
Rust
86 lines
2.9 KiB
Rust
// Copyright 2024 - Nym Technologies SA <contact@nymtech.net>
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
#[cfg(feature = "base64")]
|
|
pub mod base64 {
|
|
use base64::{Engine as _, engine::general_purpose::STANDARD};
|
|
use serde::{Deserialize, Deserializer, Serializer};
|
|
|
|
pub fn serialize<S: Serializer>(bytes: &[u8], serializer: S) -> Result<S::Ok, S::Error> {
|
|
serializer.serialize_str(&STANDARD.encode(bytes))
|
|
}
|
|
|
|
pub fn deserialize<'de, D: Deserializer<'de>>(deserializer: D) -> Result<Vec<u8>, D::Error> {
|
|
let s = <String>::deserialize(deserializer)?;
|
|
STANDARD.decode(s).map_err(serde::de::Error::custom)
|
|
}
|
|
}
|
|
|
|
#[cfg(feature = "bs58")]
|
|
pub mod bs58 {
|
|
use serde::{Deserialize, Deserializer, Serializer};
|
|
|
|
pub fn serialize<S: Serializer>(bytes: &[u8], serializer: S) -> Result<S::Ok, S::Error> {
|
|
serializer.serialize_str(&::bs58::encode(bytes).into_string())
|
|
}
|
|
|
|
pub fn deserialize<'de, D: Deserializer<'de>>(deserializer: D) -> Result<Vec<u8>, D::Error> {
|
|
let s = String::deserialize(deserializer)?;
|
|
::bs58::decode(&s)
|
|
.into_vec()
|
|
.map_err(serde::de::Error::custom)
|
|
}
|
|
}
|
|
|
|
#[cfg(feature = "hex")]
|
|
pub mod hex {
|
|
use serde::{Deserialize, Deserializer, Serializer};
|
|
|
|
pub fn serialize<S: Serializer>(bytes: &[u8], serializer: S) -> Result<S::Ok, S::Error> {
|
|
serializer.serialize_str(&::hex::encode(bytes))
|
|
}
|
|
|
|
pub fn deserialize<'de, D: Deserializer<'de>>(deserializer: D) -> Result<Vec<u8>, D::Error> {
|
|
let s = String::deserialize(deserializer)?;
|
|
::hex::decode(&s).map_err(serde::de::Error::custom)
|
|
}
|
|
}
|
|
|
|
#[cfg(feature = "date")]
|
|
pub mod date {
|
|
use serde::ser::Error;
|
|
use serde::{Deserialize, Deserializer, Serialize, Serializer, de};
|
|
use time::Date;
|
|
use time::format_description::{BorrowedFormatItem, Component, modifier};
|
|
|
|
// simple YYYY-MM-DD
|
|
pub const DATE_FORMAT: &[BorrowedFormatItem<'_>] = &[
|
|
BorrowedFormatItem::Component(Component::Year(modifier::Year::default())),
|
|
BorrowedFormatItem::Literal(b"-"),
|
|
BorrowedFormatItem::Component(Component::Month(modifier::Month::default())),
|
|
BorrowedFormatItem::Literal(b"-"),
|
|
BorrowedFormatItem::Component(Component::Day(modifier::Day::default())),
|
|
];
|
|
|
|
pub fn deserialize<'de, D>(deserializer: D) -> Result<Date, D::Error>
|
|
where
|
|
D: Deserializer<'de>,
|
|
{
|
|
let s = String::deserialize(deserializer)?;
|
|
|
|
Date::parse(&s, DATE_FORMAT).map_err(de::Error::custom)
|
|
}
|
|
|
|
pub fn serialize<S>(datetime: &Date, serializer: S) -> Result<S::Ok, S::Error>
|
|
where
|
|
S: Serializer,
|
|
{
|
|
// serialize it with human-readable format for compatibility with eclipse and nutella clients
|
|
// in the future change it back to rfc3339
|
|
datetime
|
|
.format(&DATE_FORMAT)
|
|
.map_err(S::Error::custom)?
|
|
.serialize(serializer)
|
|
}
|
|
}
|