20 breaking releases

0.20.0 Nov 17, 2024
0.18.0 Sep 3, 2024
0.15.0 Jul 27, 2024
0.8.0 Mar 6, 2024
0.0.0-alpha.1 Mar 7, 2023

#1379 in Filesystem

Download history 79/week @ 2024-08-21 140/week @ 2024-08-28 181/week @ 2024-09-04 31/week @ 2024-09-11 80/week @ 2024-09-18 134/week @ 2024-09-25 47/week @ 2024-10-02 141/week @ 2024-10-09 177/week @ 2024-10-16 87/week @ 2024-10-23 107/week @ 2024-10-30 76/week @ 2024-11-06 213/week @ 2024-11-13 76/week @ 2024-11-20 146/week @ 2024-11-27 148/week @ 2024-12-04

625 downloads per month
Used in 2 crates

Apache-2.0 OR MIT

265KB
6K SLoC

pna

test Crates.io

A pna archive reading/writing library for Rust.

# Cargo.toml
[dependencies]
pna = "0.20"

Reading an archive

use pna::{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 pna::{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(())
}

CLI

Command line user interface are available, and you can install via cargo or build from source.

Via Cargo

cargo install portable-network-archive

From Source (via Cargo)

cargo install --git https://github.com/ChanTsune/Portable-Network-Archive.git portable-network-archive

License

This project is licensed under either of

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
~208K SLoC