use super::endereco::Endereco;
use super::Error;
use serde::{Deserialize, Serialize};
use serde_repr::{Deserialize_repr, Serialize_repr};
use std::str::FromStr;
#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
#[serde(rename = "dest")]
pub struct Destinatario {
#[serde(rename = "CNPJ")]
pub cnpj: String,
#[serde(rename = "xNome")]
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(default)]
pub razao_social: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(rename = "enderDest")]
#[serde(default)]
pub endereco: Option<Endereco>,
#[serde(rename = "IE")]
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(default)]
pub ie: Option<String>,
#[serde(rename = "indIEDest")]
pub indicador_ie: IndicadorContribuicaoIe,
}
#[derive(Debug, Eq, PartialEq, Copy, Clone, Deserialize_repr, Serialize_repr)]
#[repr(u8)]
pub enum IndicadorContribuicaoIe {
ContribuinteIe = 1,
IsentoIe = 2,
NaoContribuinteIe = 9,
}
impl FromStr for Destinatario {
type Err = Error;
fn from_str(s: &str) -> Result<Self, Self::Err> {
quick_xml::de::from_str(s).map_err(|e| e.into())
}
}
impl ToString for Destinatario {
fn to_string(&self) -> String {
quick_xml::se::to_string(self).expect("Falha ao serializar destinatário")
}
}