|
1 | 1 | use serde::{Deserialize, Serialize};
|
2 | 2 | use std::collections::BTreeMap;
|
3 |
| -use std::io::Read; |
| 3 | +use std::io::{Read, Write}; |
4 | 4 | use xml::reader::{EventReader, XmlEvent};
|
5 | 5 |
|
6 | 6 | use crate::documents::BuildXML;
|
@@ -153,28 +153,26 @@ impl Default for ContentTypes {
|
153 | 153 | }
|
154 | 154 |
|
155 | 155 | impl BuildXML for ContentTypes {
|
156 |
| - fn build(&self) -> Vec<u8> { |
157 |
| - let b = XMLBuilder::new(); |
158 |
| - let mut b = b |
159 |
| - .declaration(None) |
160 |
| - .open_types("http://schemas.openxmlformats.org/package/2006/content-types"); |
161 |
| - |
162 |
| - b = b |
163 |
| - .add_default("png", "image/png") |
164 |
| - .add_default("jpeg", "image/jpeg") |
165 |
| - .add_default("jpg", "image/jpg") |
166 |
| - .add_default("bmp", "image/bmp") |
167 |
| - .add_default("gif", "image/gif") |
| 156 | + fn build_to<W: Write>( |
| 157 | + &self, |
| 158 | + stream: xml::writer::EventWriter<W>, |
| 159 | + ) -> xml::writer::Result<xml::writer::EventWriter<W>> { |
| 160 | + XMLBuilder::from(stream) |
| 161 | + .declaration(None)? |
| 162 | + .open_types("http://schemas.openxmlformats.org/package/2006/content-types")? |
| 163 | + .add_default("png", "image/png")? |
| 164 | + .add_default("jpeg", "image/jpeg")? |
| 165 | + .add_default("jpg", "image/jpg")? |
| 166 | + .add_default("bmp", "image/bmp")? |
| 167 | + .add_default("gif", "image/gif")? |
168 | 168 | .add_default(
|
169 | 169 | "rels",
|
170 | 170 | "application/vnd.openxmlformats-package.relationships+xml",
|
171 |
| - ) |
172 |
| - .add_default("xml", "application/xml"); |
173 |
| - |
174 |
| - for (k, v) in self.types.iter() { |
175 |
| - b = b.add_override(k, v); |
176 |
| - } |
177 |
| - b.close().build() |
| 171 | + )? |
| 172 | + .add_default("xml", "application/xml")? |
| 173 | + .apply_each(self.types.iter(), |(k, v), b| b.add_override(k, v))? |
| 174 | + .close()? |
| 175 | + .into_inner() |
178 | 176 | }
|
179 | 177 | }
|
180 | 178 |
|
@@ -213,8 +211,7 @@ mod tests {
|
213 | 211 |
|
214 | 212 | #[test]
|
215 | 213 | fn test_from_xml() {
|
216 |
| - let xml = r#"<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"> |
217 |
| - <Override ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml" PartName="/word/document.xml"></Override></Types>"#; |
| 214 | + let xml = r#"<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Override ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml" PartName="/word/document.xml"></Override></Types>"#; |
218 | 215 | let c = ContentTypes::from_xml(xml.as_bytes()).unwrap();
|
219 | 216 | let mut types = BTreeMap::new();
|
220 | 217 | types.insert(
|
|
0 commit comments