nfe_parser/base/item/imposto/
mod.rs1mod cofins;
21mod cofins_st;
22mod icms;
23mod icms_uf_dest;
24mod ii;
25mod ipi;
26mod issqn;
27mod pis;
28mod pis_st;
29
30pub use cofins::*;
31pub use cofins_st::*;
32pub use icms::*;
33pub use icms_uf_dest::*;
34pub use ii::*;
35pub use ipi::*;
36pub use issqn::*;
37pub use pis::*;
38pub use pis_st::*;
39
40use super::Error;
41use serde::{Deserialize, Serialize};
42use std::str::FromStr;
43
44#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
62#[serde(rename = "imposto")]
63pub struct Imposto {
64 #[serde(rename = "$unflatten=vTotTrib")]
66 #[serde(skip_serializing_if = "Option::is_none")]
67 pub valor_aproximado_tributos: Option<f32>,
68
69 #[serde(rename = "ICMS")]
71 #[serde(skip_serializing_if = "Option::is_none")]
72 pub icms: Option<IcmsContainer>,
73
74 #[serde(rename = "IPI")]
76 #[serde(skip_serializing_if = "Option::is_none")]
77 pub ipi: Option<IpiContainer>,
78
79 #[serde(rename = "II")]
81 #[serde(skip_serializing_if = "Option::is_none")]
82 pub ii: Option<ImpostoImportacao>,
83
84 #[serde(rename = "PIS")]
86 #[serde(skip_serializing_if = "Option::is_none")]
87 pub pis: Option<PisContainer>,
88
89 #[serde(rename = "PISST")]
91 #[serde(skip_serializing_if = "Option::is_none")]
92 pub pis_st: Option<PisSt>,
93
94 #[serde(rename = "COFINS")]
96 #[serde(skip_serializing_if = "Option::is_none")]
97 pub cofins: Option<CofinsContainer>,
98
99 #[serde(rename = "COFINSST")]
101 #[serde(skip_serializing_if = "Option::is_none")]
102 pub cofins_st: Option<CofinsSt>,
103
104 #[serde(rename = "ISSQN")]
106 #[serde(skip_serializing_if = "Option::is_none")]
107 pub issqn: Option<Issqn>,
108
109 #[serde(rename = "ICMSUFDest")]
111 #[serde(skip_serializing_if = "Option::is_none")]
112 pub icms_uf_dest: Option<IcmsUfDest>,
113}
114
115impl FromStr for Imposto {
116 type Err = Error;
117
118 fn from_str(s: &str) -> Result<Self, Self::Err> {
119 quick_xml::de::from_str(s).map_err(|e| e.into())
120 }
121}
122
123impl ToString for Imposto {
124 fn to_string(&self) -> String {
125 quick_xml::se::to_string(self).expect("Falha ao serializar o imposto")
126 }
127}
128
129impl Default for Imposto {
130 fn default() -> Self {
131 Self {
132 valor_aproximado_tributos: None,
133 icms: None,
134 ipi: None,
135 ii: None,
136 pis: None,
137 pis_st: None,
138 cofins: None,
139 cofins_st: None,
140 issqn: None,
141 icms_uf_dest: None,
142 }
143 }
144}