dfe 0.5.9

DFE - Documentos Fiscais EletrĂ´nicos Brasileiros
use quick_xml::events::Event;
use quick_xml::name::QName;
use quick_xml::Reader;

use crate::tipos::service_status::Status;

pub fn parse_status_response(body: &str) -> Result<Status, String> {
    let mut reader = Reader::from_str(body);
    let mut tp_amb_content = String::new();
    let mut ver_aplic_content = String::new();
    let mut c_stat_content = String::new();
    let mut xmotivo_content = String::new();
    let mut c_uf_content = String::new();
    let mut dh_recbto_content = String::new();
    let mut t_med_content = String::new();

    loop {
        match reader.read_event() {
            Ok(Event::Start(ref e)) => match e.name() {
                QName(b"tpAmb") => {
                    tp_amb_content = reader
                        .read_text(e.name())
                        .map_err(|e| e.to_string())?
                        .into_owned();
                }
                QName(b"verAplic") => {
                    ver_aplic_content = reader
                        .read_text(e.name())
                        .map_err(|e| e.to_string())?
                        .into_owned();
                }
                QName(b"cStat") => {
                    c_stat_content = reader
                        .read_text(e.name())
                        .map_err(|e| e.to_string())?
                        .into_owned();
                }
                QName(b"xMotivo") => {
                    xmotivo_content = reader
                        .read_text(e.name())
                        .map_err(|e| e.to_string())?
                        .into_owned();
                }
                QName(b"cUF") => {
                    c_uf_content = reader
                        .read_text(e.name())
                        .map_err(|e| e.to_string())?
                        .into_owned();
                }
                QName(b"dhRecbto") => {
                    dh_recbto_content = reader
                        .read_text(e.name())
                        .map_err(|e| e.to_string())?
                        .into_owned();
                }
                QName(b"tMed") => {
                    t_med_content = reader
                        .read_text(e.name())
                        .map_err(|e| e.to_string())?
                        .into_owned();
                }
                _ => {}
            },
            Ok(Event::Eof) => {
                return Ok(Status {
                    tp_amb: tp_amb_content,
                    ver_aplic: ver_aplic_content,
                    c_stat: c_stat_content,
                    x_motivo: xmotivo_content,
                    c_uf: c_uf_content,
                    dh_recbto: dh_recbto_content,
                    t_med: t_med_content,
                });
            }
            Err(e) => {
                return Err(format!("falha ao processar XML de resposta: {}", e));
            }
            _ => {}
        }
    }
}