nfe_parser/base/item/imposto/
mod.rs1mod cofins;
7mod icms;
8mod pis;
9
10pub use cofins::*;
11pub use icms::*;
12pub use pis::*;
13
14use super::Error;
15use serde::{Deserialize, Serialize};
16use std::str::FromStr;
17
18#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
22#[serde(rename = "imposto")]
23pub struct Imposto {
24 #[serde(rename = "$unflatten=vTotTrib")]
26 #[serde(skip_serializing_if = "Option::is_none")]
27 pub valor_aproximado_tributos: Option<f32>,
28 #[serde(rename = "ICMS")]
30 #[serde(skip_serializing_if = "Option::is_none")]
31 pub icms: Option<IcmsContainer>,
32 #[serde(rename = "PIS")]
34 #[serde(skip_serializing_if = "Option::is_none")]
35 pub pis: Option<PisContainer>,
36 #[serde(rename = "COFINS")]
38 #[serde(skip_serializing_if = "Option::is_none")]
39 pub cofins: Option<CofinsContainer>,
40}
41
42impl FromStr for Imposto {
43 type Err = Error;
44
45 fn from_str(s: &str) -> Result<Self, Self::Err> {
46 quick_xml::de::from_str(s).map_err(|e| e.into())
47 }
48}
49
50impl ToString for Imposto {
51 fn to_string(&self) -> String {
52 quick_xml::se::to_string(self).expect("Falha ao serializar o imposto")
53 }
54}
55
56impl Default for Imposto {
57 fn default() -> Self {
58 Self {
59 valor_aproximado_tributos: None,
60 icms: None,
61 pis: None,
62 cofins: None,
63 }
64 }
65}