substrate-stellar-sdk 0.3.0

A Substrate compatible SDK for Stellar
Documentation
use num_rational::Ratio;

use crate::{Price, StellarSdkError};

impl Price {
    pub fn from_fraction(denominator: i32, numerator: i32) -> Result<Price, StellarSdkError> {
        if denominator <= 0 || numerator <= 0 {
            return Err(StellarSdkError::InvalidPrice)
        }

        Ok(Price { d: denominator, n: numerator })
    }

    pub fn from_float(price: f64) -> Result<Price, StellarSdkError> {
        if price <= 0.0 {
            return Err(StellarSdkError::InvalidPrice)
        }

        Ratio::<i32>::approximate_float(price)
            .ok_or(StellarSdkError::NotApproximableAsFraction)
            .map(|price| Price { d: *price.denom(), n: *price.numer() })
    }
}