Skip to content

Commit

Permalink
Bring back ByteWriter
Browse files Browse the repository at this point in the history
This makes the code compatible with original branch of quick-xml
  • Loading branch information
elrnv committed Jul 22, 2024
1 parent eb3fe25 commit c295d88
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 8 deletions.
15 changes: 8 additions & 7 deletions src/xml.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3235,13 +3235,14 @@ impl VTKFile {

/// Parse an XML VTK file from the given reader.
pub fn parse(reader: impl BufRead) -> Result<VTKFile> {
let mut reader = quick_xml::Reader::from_reader(reader);
let config = reader.config_mut();
config.expand_empty_elements = true;
config.check_end_names = true;
config.trim_text_start = true;
config.trim_text_end = false;
let mut de = de::Deserializer::from_custom_reader(reader);
// let mut reader = quick_xml::Reader::from_reader(reader);
// let config = reader.config_mut();
// config.expand_empty_elements = true;
// config.check_end_names = true;
// config.trim_text_start = true;
// config.trim_text_end = false;
// let mut de = de::Deserializer::from_custom_reader(reader);
let mut de = de::Deserializer::from_reader(reader);
Ok(VTKFile::deserialize(&mut de)?)
}

Expand Down
43 changes: 42 additions & 1 deletion src/xml/se.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,54 @@
use quick_xml::DeError;
use serde::ser::Serialize;

/// Serialize struct into a `Write`r
#[cfg(not(feature = "binary"))]
struct ByteWriter<W>(W)
where
W: std::io::Write;

#[cfg(not(feature = "binary"))]
impl<W: std::io::Write> std::fmt::Write for ByteWriter<W> {
fn write_str(&mut self, s: &str) -> std::fmt::Result {
self.0.write(s.as_bytes()).map_err(|_| std::fmt::Error)?;
std::fmt::Result::Ok(())
}
}

#[cfg(not(feature = "binary"))]
impl<W: std::io::Write> std::io::Write for ByteWriter<W> {
fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
self.0.write(buf)
}

fn flush(&mut self) -> std::io::Result<()> {
self.0.flush()
}
}

/// Serialize struct into an `io::Write`r
#[cfg(feature = "binary")]
pub fn to_writer<W: std::io::Write, S: Serialize>(writer: W, value: &S) -> Result<(), DeError> {
let mut buf_writer = std::io::BufWriter::new(writer);
let serializer = quick_xml::se::io::Serializer::new(&mut buf_writer);
value.serialize(serializer)
}

#[cfg(not(feature = "binary"))]
pub fn to_writer<W: std::io::Write, S: Serialize>(writer: W, value: &S) -> Result<(), DeError> {
let mut buf_writer = ByteWriter(std::io::BufWriter::new(writer));
let serializer = quick_xml::se::Serializer::new(&mut buf_writer);
value.serialize(serializer)
}

/// Serialize struct into a `fmt::Write`r
pub fn to_fmt_writer<W: std::fmt::Write, S: Serialize>(
mut writer: W,
value: &S,
) -> Result<(), DeError> {
let serializer = quick_xml::se::Serializer::new(&mut writer);
value.serialize(serializer)
}

/// Serialize struct into a `String`
pub fn to_string<S: Serialize>(value: &S) -> Result<String, DeError> {
let mut s = String::new();
Expand Down

0 comments on commit c295d88

Please sign in to comment.