use ::env_logger::Builder;
use ::simple_parse::{SpOptHints, SpReadRaw, SpWrite};
#[derive(Debug, SpOptHints, SpReadRaw)]
pub struct File<'a> {
pub content_len: &'a u32,
pub filename: &'a str,
#[sp(count = "content_len")]
pub contents: &'a [u8],
pub timestamp: u32, }
pub fn main() -> Result<(), Box<dyn std::error::Error>> {
use std::io::Write;
let mut builder = Builder::from_default_env();
builder
.format(|buf, record| writeln!(buf, "[{}] {}", record.level(), record.args()))
.init();
let mut data = Vec::new();
(128).to_writer(&mut data)?;
"Some_very_long_filename_we_dont_want_to_copy.txt".to_writer(&mut data)?;
[1u8; 124].to_writer(&mut data)?; (0xffffffffu32).to_writer(&mut data)?;
let f = File::from_slice(&mut std::io::Cursor::new(&data))?;
println!("Data starts at 0x{:p}", data.as_ptr());
println!("{:?}", f);
println!("File {{");
println!(
"\tfilename: 0x{:p} [{}]",
f.filename.as_ptr(),
f.filename.len()
);
println!(
"\tcontents: 0x{:p} [{}]",
f.contents.as_ptr(),
f.contents.len()
);
println!("}}");
Ok(())
}