60 lines
1.5 KiB
Rust
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);
|
|
}
|
|
}
|