23 releases (4 breaking)

Uses new Rust 2024

0.6.0 Aug 22, 2025
0.5.12 Jul 17, 2025
0.5.7 Mar 3, 2025

#1088 in Parser implementations

43 downloads per month

MIT/Apache

48KB
755 lines

nzb-rs

Tests Latest Version Documentation License

nzb-rs is a spec compliant parser for NZB files.

Installation

nzb-rs is available on crates.io, so you can simply use cargo to install it.

cargo add nzb-rs

Optional features:

  • serde: Enables serialization and deserialization via serde.

Example

use nzb_rs::{Nzb, ParseNzbError};

fn main() -> Result<(), ParseNzbError> {
    let xml = r#"
        <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE nzb PUBLIC "-//newzBin//DTD NZB 1.1//EN" "http://www.newzbin.com/DTD/nzb/nzb-1.1.dtd">
        <nzb
            xmlns="http://www.newzbin.com/DTD/2003/nzb">
            <file poster="John &lt;nzb@nowhere.example&gt;" date="1706440708" subject="[1/1] - &quot;Big Buck Bunny - S01E01.mkv&quot; yEnc (1/2) 1478616">
                <groups>
                    <group>alt.binaries.boneless</group>
                </groups>
                <segments>
                    <segment bytes="739067" number="1">9cacde4c986547369becbf97003fb2c5-9483514693959@example</segment>
                    <segment bytes="739549" number="2">70a3a038ce324e618e2751e063d6a036-7285710986748@example</segment>
                </segments>
            </file>
        </nzb>
        "#;
    let nzb = Nzb::parse(xml)?;
    println!("{:#?}", nzb);
    assert_eq!(nzb.file().name(), Some("Big Buck Bunny - S01E01.mkv"));
    Ok(())
}

Safety

  • This library must not panic. Any panic should be considered a bug and reported.
  • This library uses roxmltree for parsing the NZB. roxmltree is written entirely in safe Rust, so by Rust's guarantees the worst that a malicious NZB can do is to cause a panic.

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~4.5–6.5MB
~117K SLoC