use std::time::Duration;
#[derive(Debug, Clone)]
pub struct EdgarConfig {
pub user_agent: String,
pub rate_limit: u32,
pub timeout: Duration,
pub base_urls: EdgarUrls,
}
#[derive(Debug, Clone)]
pub struct EdgarUrls {
pub archives: String,
pub data: String,
pub files: String,
pub search: String,
}
impl Default for EdgarConfig {
fn default() -> Self {
Self {
user_agent: "edgarkit/0.1.0".to_string(),
rate_limit: 10,
timeout: Duration::from_secs(30),
base_urls: EdgarUrls {
archives: "https://www.sec.gov/Archives/edgar".to_string(),
data: "https://data.sec.gov".to_string(),
files: "https://www.sec.gov/files".to_string(),
search: "https://efts.sec.gov/LATEST/search-index/".to_string(),
},
}
}
}
impl EdgarConfig {
pub fn new(
user_agent: impl Into<String>,
rate_limit: u32,
timeout: Duration,
base_urls: Option<EdgarUrls>,
) -> Self {
Self {
user_agent: user_agent.into(),
rate_limit,
timeout,
base_urls: base_urls.unwrap_or_default(),
}
}
}
impl Default for EdgarUrls {
fn default() -> Self {
Self {
archives: "https://www.sec.gov/Archives/edgar".to_string(),
data: "https://data.sec.gov".to_string(),
files: "https://www.sec.gov/files".to_string(),
search: "https://efts.sec.gov/LATEST/search-index/".to_string(),
}
}
}