solscan 0.1.1

A Rust Solscan HTTP API client
Documentation
use serde::{Deserialize, Deserializer, Serializer};

pub fn serialize<S: Serializer>(value: &String, s: S) -> Result<S::Ok, S::Error> {
    s.serialize_str(value)
}

pub fn deserialize<'de, D>(d: D) -> Result<String, D::Error>
where
    D: Deserializer<'de>,
{
    String::deserialize(d)
}

pub mod option {
    use super::*;

    pub fn serialize<S: Serializer>(value: &Option<String>, s: S) -> Result<S::Ok, S::Error> {
        if let Some(value) = value {
            s.serialize_some(&value)
        } else {
            s.serialize_none()
        }
    }

    pub fn deserialize<'de, D>(d: D) -> Result<Option<String>, D::Error>
    where
        D: Deserializer<'de>,
    {
        match <Option<String>>::deserialize(d) {
            Ok(Some(s)) => {
                if s.is_empty() {
                    Ok(None)
                } else {
                    Ok(Some(s))
                }
            }
            Ok(None) => Ok(None),
            Err(e) => Err(e),
        }
    }
}

pub mod vec {
    use super::*;
    use serde::ser::SerializeSeq;

    pub fn serialize<S: Serializer>(value: &Vec<String>, s: S) -> Result<S::Ok, S::Error> {
        let mut seq = s.serialize_seq(Some(value.len()))?;
        for value in value {
            seq.serialize_element(&value)?;
        }
        seq.end()
    }

    pub fn deserialize<'de, D>(d: D) -> Result<Vec<String>, D::Error>
    where
        D: Deserializer<'de>,
    {
        <Vec<String>>::deserialize(d)
    }
}