xrpl-rust 1.1.0

A 100% Rust library to interact with the XRPL
Documentation
use crate::models::amount::IssuedCurrencyAmount;
use crate::models::currency::ToAmount;
use crate::models::Model;
use alloc::borrow::Cow;
use serde::{Deserialize, Serialize};

#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize, Default)]
pub struct IssuedCurrency<'a> {
    pub currency: Cow<'a, str>,
    pub issuer: Cow<'a, str>,
}

impl<'a> Model for IssuedCurrency<'a> {}

impl<'a> ToAmount<'a, IssuedCurrencyAmount<'a>> for IssuedCurrency<'a> {
    fn to_amount(&self, value: Cow<'a, str>) -> IssuedCurrencyAmount<'a> {
        IssuedCurrencyAmount::new(self.currency.clone(), self.issuer.clone(), value)
    }
}

impl<'a> IssuedCurrency<'a> {
    pub fn new(currency: Cow<'a, str>, issuer: Cow<'a, str>) -> Self {
        Self { currency, issuer }
    }
}

impl<'a> From<IssuedCurrencyAmount<'a>> for IssuedCurrency<'a> {
    fn from(value: IssuedCurrencyAmount<'a>) -> Self {
        Self {
            currency: value.currency,
            issuer: value.issuer,
        }
    }
}

#[cfg(test)]
mod test_serde {
    use super::*;

    #[test]
    fn test_serialize() {
        let issued_currency =
            IssuedCurrency::new("TST".into(), "rP9jPyP5kyvFRb6ZiRghAGw5u8SGAmU4bd".into());
        let issued_currency_json = serde_json::to_string(&issued_currency).unwrap();
        let actual = issued_currency_json.as_str();
        let expected = r#"{"currency":"TST","issuer":"rP9jPyP5kyvFRb6ZiRghAGw5u8SGAmU4bd"}"#;

        assert_eq!(expected, actual);
    }

    #[test]
    fn test_deserialize() {
        let issued_currency_json =
            r#"{"currency":"TST","issuer":"rP9jPyP5kyvFRb6ZiRghAGw5u8SGAmU4bd"}"#;
        let actual = serde_json::from_str(issued_currency_json).unwrap();
        let expected =
            IssuedCurrency::new("TST".into(), "rP9jPyP5kyvFRb6ZiRghAGw5u8SGAmU4bd".into());

        assert_eq!(expected, actual);
    }
}