#![doc(hidden)]
use crate::model::enums::{ExchCode, MarketSecDesc, SecurityType, SecurityType2};
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum ResponseResult<T> {
Success(T),
Error(ResponseError),
}
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct ResponseError {
pub error: String,
}
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct FigiResult {
pub figi: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub security_type: Option<SecurityType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub market_sector: Option<MarketSecDesc>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ticker: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub exch_code: Option<ExchCode>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(rename = "shareClassFIGI")]
pub share_class_figi: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(rename = "compositeFIGI")]
pub composite_figi: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub security_type2: Option<SecurityType2>,
#[serde(skip_serializing_if = "Option::is_none")]
pub security_description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub metadata: Option<String>,
}
impl FigiResult {
#[must_use]
pub fn has_composite_figi(&self) -> bool {
self.composite_figi.is_some()
}
#[must_use]
pub fn has_share_class_figi(&self) -> bool {
self.share_class_figi.is_some()
}
#[must_use]
pub fn display_name(&self) -> &str {
self.name
.as_deref()
.unwrap_or_else(|| self.ticker.as_deref().unwrap_or(&self.figi))
}
}