umya-spreadsheet 2.3.3

umya-spreadsheet is a library written in pure Rust to read and write xlsx file.
Documentation
use crate::reader::driver::*;
use crate::structs::raw::RawFile;
use crate::structs::StringValue;
use crate::structs::WriterManager;
use crate::structs::XlsxError;
use crate::writer::driver::*;
use quick_xml::events::BytesStart;
use quick_xml::Reader;
use quick_xml::Writer;
use std::io;
use std::io::Cursor;

#[derive(Clone, Debug, Default)]
pub(crate) struct RawRelationship {
    id: StringValue,
    r_type: StringValue,
    target: StringValue,
    raw_file: RawFile,
    target_mode: StringValue,
}

impl RawRelationship {
    #[inline]
    pub(crate) fn get_id(&self) -> &str {
        self.id.get_value_str()
    }

    #[inline]
    pub(crate) fn set_id<S: Into<String>>(&mut self, value: S) -> &mut Self {
        self.id.set_value(value);
        self
    }

    #[inline]
    pub(crate) fn get_target(&self) -> &str {
        self.target.get_value_str()
    }

    #[inline]
    pub(crate) fn set_target<S: Into<String>>(&mut self, value: S) -> &mut Self {
        self.target.set_value(value);
        self
    }

    #[inline]
    pub(crate) fn get_type(&self) -> &str {
        self.r_type.get_value_str()
    }

    #[inline]
    pub(crate) fn set_type<S: Into<String>>(&mut self, value: S) -> &mut Self {
        self.r_type.set_value(value);
        self
    }

    #[inline]
    pub(crate) fn get_raw_file(&self) -> &RawFile {
        &self.raw_file
    }

    #[inline]
    pub(crate) fn get_raw_file_mut(&mut self) -> &mut RawFile {
        &mut self.raw_file
    }

    #[inline]
    pub(crate) fn _set_raw_file(&mut self, value: RawFile) -> &mut Self {
        self.raw_file = value;
        self
    }

    #[inline]
    pub(crate) fn get_target_mode(&self) -> &str {
        self.target_mode.get_value_str()
    }

    #[inline]
    pub(crate) fn set_target_mode<S: Into<String>>(&mut self, value: S) -> &mut Self {
        self.target_mode.set_value(value);
        self
    }

    pub(crate) fn set_attributes<R: std::io::BufRead, A: io::Read + io::Seek>(
        &mut self,
        _reader: &mut Reader<R>,
        e: &BytesStart,
        arv: &mut zip::read::ZipArchive<A>,
        base_path: &str,
    ) {
        self.set_id(get_attribute(e, b"Id").unwrap());
        self.set_type(get_attribute(e, b"Type").unwrap());
        self.set_target(get_attribute(e, b"Target").unwrap());
        if let Some(v) = get_attribute(e, b"TargetMode") {
            self.set_target_mode(v);
        }
        if self.get_target_mode() != "External" {
            let target = self.get_target().to_string();
            self.get_raw_file_mut()
                .set_attributes(arv, base_path, &target);
        }
    }

    pub(crate) fn write_to(&self, writer: &mut Writer<Cursor<Vec<u8>>>) {
        let mut attributes: Vec<(&str, &str)> = Vec::new();
        attributes.push(("Id", self.get_id()));
        attributes.push(("Type", self.get_type()));
        attributes.push(("Target", self.get_target()));
        if self.get_target_mode() != "" {
            attributes.push(("TargetMode", self.get_target_mode()));
        }
        write_start_tag(writer, "Relationship", attributes, true);
    }

    #[inline]
    pub(crate) fn write_to_bin<W: io::Seek + io::Write>(
        &self,
        writer_mng: &mut WriterManager<W>,
    ) -> Result<(), XlsxError> {
        self.get_raw_file().write_to(writer_mng)
    }
}