soblendwa 0.1.0

SoblendWA: a blazing fast WhatsApp Web multi-device client library written in Rust. Crafted by Soblend Development Studio.
Documentation
use base64::engine::general_purpose::STANDARD;
use base64::Engine;
use serde::de::Error as _;
use serde::{Deserialize, Deserializer, Serializer};

pub mod array {
    use super::*;

    pub fn serialize<S: Serializer, const N: usize>(value: &[u8; N], serializer: S) -> Result<S::Ok, S::Error> {
        serializer.serialize_str(&STANDARD.encode(value))
    }

    pub fn deserialize<'de, D: Deserializer<'de>, const N: usize>(deserializer: D) -> Result<[u8; N], D::Error> {
        let raw = String::deserialize(deserializer)?;
        let bytes = STANDARD.decode(raw).map_err(D::Error::custom)?;
        bytes.try_into().map_err(|_| D::Error::custom(format!("expected {N} bytes")))
    }
}

pub mod option {
    use super::*;

    pub fn serialize<S: Serializer>(value: &Option<Vec<u8>>, serializer: S) -> Result<S::Ok, S::Error> {
        match value {
            Some(bytes) => serializer.serialize_some(&STANDARD.encode(bytes)),
            None => serializer.serialize_none(),
        }
    }

    pub fn deserialize<'de, D: Deserializer<'de>>(deserializer: D) -> Result<Option<Vec<u8>>, D::Error> {
        Option::<String>::deserialize(deserializer)?
            .map(|raw| STANDARD.decode(raw).map_err(D::Error::custom))
            .transpose()
    }
}