use serde::{Deserialize, Deserializer, Serialize};
fn deserialize_size<'de, D>(deserializer: D) -> Result<Option<u64>, D::Error>
where
D: Deserializer<'de>,
{
let s = String::deserialize(deserializer)?;
Ok(s.parse().ok())
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[non_exhaustive]
pub struct EdgarFilingIndex {
#[serde(default)]
pub directory: EdgarFilingIndexDirectory,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[non_exhaustive]
pub struct EdgarFilingIndexDirectory {
#[serde(default)]
pub item: Vec<EdgarFilingIndexItem>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[non_exhaustive]
pub struct EdgarFilingIndexItem {
pub name: String,
#[serde(default, rename = "type")]
pub item_type: String,
#[serde(default, deserialize_with = "deserialize_size")]
pub size: Option<u64>,
}