Skip to main content

nfe_parser/base/item/imposto/
mod.rs

1//! Impostos da Nota Fiscal Eletrônica
2//!
3//! Este módulo contém as estruturas para representar os impostos
4//! incidentes sobre os produtos da NF-e.
5
6mod 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/// Impostos do item da nota fiscal
19///
20/// Contém os tributos incidentes sobre o produto.
21#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
22#[serde(rename = "imposto")]
23pub struct Imposto {
24    /// Valor aproximado total de tributos
25    #[serde(rename = "$unflatten=vTotTrib")]
26    #[serde(skip_serializing_if = "Option::is_none")]
27    pub valor_aproximado_tributos: Option<f32>,
28    /// ICMS - Imposto sobre Circulação de Mercadorias e Serviços
29    #[serde(rename = "ICMS")]
30    #[serde(skip_serializing_if = "Option::is_none")]
31    pub icms: Option<IcmsContainer>,
32    /// PIS - Programa de Integração Social
33    #[serde(rename = "PIS")]
34    #[serde(skip_serializing_if = "Option::is_none")]
35    pub pis: Option<PisContainer>,
36    /// COFINS - Contribuição para Financiamento da Seguridade Social
37    #[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}