1use super::endereco::Endereco;
7use super::Error;
8use serde::{Deserialize, Serialize};
9use serde_repr::{Deserialize_repr, Serialize_repr};
10use std::str::FromStr;
11
12#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
14#[serde(rename = "dest")]
15pub struct Destinatario {
16 #[serde(rename = "CNPJ")]
18 pub cnpj: String,
19 #[serde(rename = "xNome")]
21 #[serde(skip_serializing_if = "Option::is_none")]
22 #[serde(default)]
23 pub razao_social: Option<String>,
24 #[serde(skip_serializing_if = "Option::is_none")]
26 #[serde(rename = "enderDest")]
27 #[serde(default)]
28 pub endereco: Option<Endereco>,
29 #[serde(rename = "IE")]
31 #[serde(skip_serializing_if = "Option::is_none")]
32 #[serde(default)]
33 pub ie: Option<String>,
34 #[serde(rename = "indIEDest")]
36 pub indicador_ie: IndicadorContribuicaoIe,
37}
38
39#[derive(Debug, Eq, PartialEq, Copy, Clone, Deserialize_repr, Serialize_repr)]
41#[repr(u8)]
42pub enum IndicadorContribuicaoIe {
43 ContribuinteIe = 1,
45 IsentoIe = 2,
47 NaoContribuinteIe = 9,
49}
50
51impl FromStr for Destinatario {
52 type Err = Error;
53
54 fn from_str(s: &str) -> Result<Self, Self::Err> {
55 quick_xml::de::from_str(s).map_err(|e| e.into())
56 }
57}
58
59impl ToString for Destinatario {
60 fn to_string(&self) -> String {
61 quick_xml::se::to_string(self).expect("Falha ao serializar destinatário")
62 }
63}