narinfo-rs/src/narinfo/to_str.rs

60 lines
1.5 KiB
Rust

use super::NarInfo;
use core::fmt::{self, Write};
impl<'a> NarInfo<'a> {
/// Serializes the narinfo struct into the text format
/// ```
/// use narinfo::NarInfo;
///
/// let info = NarInfo::parse(include_str!("../../sample.narinfo")).unwrap();
/// let mut serialized = String::new();
/// info.serialize_into(&mut serialized).unwrap();
/// ```
pub fn serialize_into<T: Write>(&self, w: &mut T) -> fmt::Result {
write!(w, "StorePath: {}", self.store_path)?;
write!(w, "\nURL: {}", self.url)?;
write!(w, "\nNarHash: {}", self.nar_hash)?;
write!(w, "\nNarSize: {}", self.nar_size)?;
write!(w, "\nReferences: {}", self.references.join(" "))?;
write!(w, "\nSig: ")?;
for sig in self.sigs.iter() {
sig.serialize_into(w)?;
}
if let Some(compression) = &self.compression {
write!(w, "\nCompression: {}", compression)?;
};
if let Some(file_hash) = self.file_hash {
write!(w, "\nFileHash: {}", file_hash)?;
};
if let Some(file_size) = self.file_size {
write!(w, "\nFileSize: {}", file_size)?;
};
if let Some(deriver) = &self.deriver {
write!(w, "\nDeriver: {}", deriver)?;
};
Ok(())
}
}
#[cfg(test)]
mod tests {
use alloc::string::String;
use super::*;
#[test]
fn serialize_deserialize_eq() {
let sample = include_str!("../../sample.narinfo");
let info = NarInfo::parse(sample).unwrap();
let mut serialized = String::new();
info.serialize_into(&mut serialized).unwrap();
let info2 = NarInfo::parse(&serialized).unwrap();
assert_eq!(info, info2);
}
}