use serde::{Deserialize, Serialize};
use super::obligation::PassportObligation;
use crate::catalog::granularity::Granularity;
use crate::catalog::retention::RetentionBasis;
use crate::catalog::status::RegulatoryStatus;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct InstrumentBinding {
pub product_group: String,
pub status: RegulatoryStatus,
#[serde(default)]
pub legal_basis: Vec<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub passport: Option<PassportObligation>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub retention_years: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub retention_years_basis: Option<RetentionBasis>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub granularity: Option<Granularity>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub notes: Option<String>,
}
impl InstrumentBinding {
#[must_use]
pub fn allows_determination(&self) -> bool {
self.status.allows_determination()
}
#[must_use]
pub fn requires_passport(&self, instrument_default: &PassportObligation) -> bool {
self.passport
.as_ref()
.unwrap_or(instrument_default)
.is_required()
}
}