pub mod io;
#[derive(Debug, Clone)]
pub struct FundingRate {
pub funding_rate_ts: u64,
pub symbol: String,
pub funding_rate: f64,
pub next_funding_ts: u64,
pub exchange: String,
}
impl FundingRate {
pub fn builder() -> FundingRateBuilder {
FundingRateBuilder::new()
}
}
#[derive(Debug, Clone)]
pub struct FundingRateBuilder {
funding_rate_ts: Option<u64>,
symbol: Option<String>,
funding_rate: Option<f64>,
next_funding_ts: Option<u64>,
exchange: Option<String>,
}
impl Default for FundingRateBuilder {
fn default() -> Self {
Self::new()
}
}
impl FundingRateBuilder {
pub fn new() -> Self {
FundingRateBuilder {
funding_rate_ts: None,
symbol: None,
funding_rate: None,
next_funding_ts: None,
exchange: None,
}
}
pub fn funding_rate_ts(mut self, funding_rate_ts: u64) -> Self {
self.funding_rate_ts = Some(funding_rate_ts);
self
}
pub fn symbol(mut self, symbol: String) -> Self {
self.symbol = Some(symbol);
self
}
pub fn funding_rate(mut self, rate: f64) -> Self {
self.funding_rate = Some(rate);
self
}
pub fn next_funding_ts(mut self, ts: u64) -> Self {
self.next_funding_ts = Some(ts);
self
}
pub fn exchange(mut self, exchange: String) -> Self {
self.exchange = Some(exchange);
self
}
pub fn build(self) -> Result<FundingRate, String> {
let funding_rate_ts = self.funding_rate_ts.ok_or("Missing ts")?;
let symbol = self.symbol.ok_or("Missing symbol")?;
let funding_rate = self.funding_rate.ok_or("Missing funding_rate")?;
let next_funding_ts = self.next_funding_ts.unwrap_or(0);
let exchange = self.exchange.ok_or("Missing exchange")?;
Ok(FundingRate {
funding_rate_ts,
symbol,
funding_rate,
next_funding_ts,
exchange,
})
}
}