use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[non_exhaustive]
pub struct TreasuryAuction {
pub record_date: String,
pub cusip: String,
pub security_type: String,
pub security_term: String,
pub auction_date: String,
pub issue_date: String,
pub maturity_date: String,
pub reopening: Option<bool>,
pub auction_format: Option<String>,
pub int_rate: Option<f64>,
pub offering_amt: Option<f64>,
pub total_tendered: Option<f64>,
pub total_accepted: Option<f64>,
pub bid_to_cover_ratio: Option<f64>,
pub high_yield: Option<f64>,
pub high_discnt_rate: Option<f64>,
pub high_investment_rate: Option<f64>,
pub high_price: Option<f64>,
pub primary_dealer_accepted: Option<f64>,
pub direct_bidder_accepted: Option<f64>,
pub indirect_bidder_accepted: Option<f64>,
pub comp_accepted: Option<f64>,
pub noncomp_accepted: Option<f64>,
pub soma_accepted: Option<f64>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[non_exhaustive]
pub struct UpcomingAuction {
pub record_date: String,
pub security_type: String,
pub security_term: String,
pub cusip: String,
pub reopening: Option<bool>,
pub offering_amt: Option<f64>,
pub announcement_date: String,
pub auction_date: String,
pub issue_date: String,
}
#[derive(Debug, Clone, Default, PartialEq, Eq)]
#[non_exhaustive]
pub struct TreasuryAuctionQuery {
pub security_type: Option<String>,
pub security_term: Option<String>,
pub from: Option<String>,
pub to: Option<String>,
pub limit: Option<u32>,
}
impl TreasuryAuctionQuery {
pub fn new() -> Self {
Self::default()
}
pub fn security_type(mut self, security_type: impl Into<String>) -> Self {
self.security_type = Some(security_type.into());
self
}
pub fn security_term(mut self, security_term: impl Into<String>) -> Self {
self.security_term = Some(security_term.into());
self
}
pub fn dates(mut self, from: Option<&str>, to: Option<&str>) -> Self {
self.from = from.map(str::to_string);
self.to = to.map(str::to_string);
self
}
pub fn limit(mut self, limit: u32) -> Self {
self.limit = Some(limit);
self
}
}