33 releases (20 breaking)
new 0.20.0 | Nov 17, 2024 |
---|---|
0.18.0 | Sep 3, 2024 |
0.15.0 | Jul 27, 2024 |
0.8.1 | Mar 18, 2024 |
0.0.0-alpha.1 |
|
#569 in Data structures
521 downloads per month
Used in 3 crates
(via pna)
250KB
6K
SLoC
libpna
A pna archive reading/writing library for Rust.
# Cargo.toml
[dependencies]
libpna = "0.20"
Reading an archive
use libpna::{Archive, ReadOptions};
use std::fs::File;
use std::io::{self, copy, prelude::*};
fn main() -> io::Result<()> {
let file = File::open("foo.pna")?;
let mut archive = Archive::read_header(file)?;
for entry in archive.entries_skip_solid() {
let entry = entry?;
let mut file = File::create(entry.header().path().as_path())?;
let mut reader = entry.reader(ReadOptions::builder().build())?;
copy(&mut reader, &mut file)?;
}
Ok(())
}
Writing an archive
use libpna::{Archive, EntryBuilder, WriteOptions};
use std::fs::File;
use std::io::{self, prelude::*};
fn main() -> io::Result<()> {
let file = File::create("foo.pna")?;
let mut archive = Archive::write_header(file)?;
let mut entry_builder = EntryBuilder::new_file(
"bar.txt".into(),
WriteOptions::builder().build(),
)?;
entry_builder.write(b"content")?;
let entry = entry_builder.build()?;
archive.add_entry(entry)?;
archive.finalize()?;
Ok(())
}
License
This project is licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this project by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
Dependencies
~12MB
~211K SLoC