pub mod io;
#[derive(Debug, Clone)]
pub struct OpenInterest {
pub open_interest_ts: u64,
pub symbol: String,
pub open_interest: f64,
pub open_interest_value: f64,
pub exchange: String,
}
impl OpenInterest {
pub fn builder() -> OpenInterestBuilder {
OpenInterestBuilder::new()
}
}
#[derive(Debug, Clone)]
pub struct OpenInterestBuilder {
open_interest_ts: Option<u64>,
symbol: Option<String>,
open_interest: Option<f64>,
open_interest_value: Option<f64>,
exchange: Option<String>,
}
impl Default for OpenInterestBuilder {
fn default() -> Self {
Self::new()
}
}
impl OpenInterestBuilder {
pub fn new() -> Self {
OpenInterestBuilder {
open_interest_ts: None,
symbol: None,
open_interest: None,
open_interest_value: None,
exchange: None,
}
}
pub fn open_interest_ts(mut self, open_interest_ts: u64) -> Self {
self.open_interest_ts = Some(open_interest_ts);
self
}
pub fn symbol(mut self, symbol: String) -> Self {
self.symbol = Some(symbol);
self
}
pub fn open_interest(mut self, oi: f64) -> Self {
self.open_interest = Some(oi);
self
}
pub fn open_interest_value(mut self, value: f64) -> Self {
self.open_interest_value = Some(value);
self
}
pub fn exchange(mut self, exchange: String) -> Self {
self.exchange = Some(exchange);
self
}
pub fn build(self) -> Result<OpenInterest, String> {
let open_interest_ts = self.open_interest_ts.ok_or("Missing ts")?;
let symbol = self.symbol.ok_or("Missing symbol")?;
let open_interest = self.open_interest.ok_or("Missing open_interest")?;
let open_interest_value = self.open_interest_value.unwrap_or(0.0);
let exchange = self.exchange.ok_or("Missing exchange")?;
Ok(OpenInterest {
open_interest_ts,
symbol,
open_interest,
open_interest_value,
exchange,
})
}
}