umya_spreadsheet/structs/
ole_objects.rs1use super::OleObject;
3use crate::reader::driver::*;
4use crate::structs::raw::RawRelationships;
5use crate::writer::driver::*;
6use quick_xml::events::{BytesStart, Event};
7use quick_xml::Reader;
8use quick_xml::Writer;
9use std::io::Cursor;
10use thin_vec::ThinVec;
11
12#[derive(Clone, Default, Debug)]
13pub struct OleObjects {
14 ole_object: ThinVec<OleObject>,
15}
16
17impl OleObjects {
18 #[inline]
19 pub fn get_ole_object(&self) -> &[OleObject] {
20 &self.ole_object
21 }
22
23 #[inline]
24 pub fn get_ole_object_mut(&mut self) -> &mut ThinVec<OleObject> {
25 &mut self.ole_object
26 }
27
28 #[inline]
29 pub fn set_ole_object(&mut self, value: OleObject) -> &mut Self {
30 self.ole_object.push(value);
31 self
32 }
33
34 pub(crate) fn set_attributes<R: std::io::BufRead>(
35 &mut self,
36 reader: &mut Reader<R>,
37 _e: &BytesStart,
38 relationships: &RawRelationships,
39 ) {
40 xml_read_loop!(
41 reader,
42 Event::Start(ref e) => {
43 if e.name().into_inner() == b"mc:AlternateContent" {
44 let mut obj = OleObject::default();
45 obj.set_attributes(reader, e, relationships);
46 self.set_ole_object(obj);
47 }
48 },
49 Event::End(ref e) => {
50 if e.name().into_inner() == b"oleObjects" {
51 return
52 }
53 },
54 Event::Eof => panic!("Error: Could not find {} end element", "oleObjects")
55 );
56 }
57
58 pub(crate) fn write_to(
59 &self,
60 writer: &mut Writer<Cursor<Vec<u8>>>,
61 r_id: &usize,
62 ole_id: &usize,
63 ) {
64 if !self.ole_object.is_empty() {
65 write_start_tag(writer, "oleObjects", vec![], false);
67
68 let mut r = *r_id;
70 let mut o = *ole_id;
71 for obj in &self.ole_object {
72 obj.write_to(writer, &r, &o);
73 r += 2;
74 o += 1;
75 }
76
77 write_end_tag(writer, "oleObjects");
78 }
79 }
80}