nzb-rs is a spec compliant parser for NZB files.
nzb-rs is available on crates.io, so you can simply use cargo to install it.
cargo add nzb-rsOptional features:
serde: Enables serialization and deserialization via serde.
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 <nzb@nowhere.example>" date="1706440708" subject="[1/1] - "Big Buck Bunny - S01E01.mkv" 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(())
}- This library must not panic. Any panic should be considered a bug and reported.
- This library uses
roxmltreefor parsing the NZB.roxmltreeis written entirely in safe Rust, so by Rust's guarantees the worst that a malicious NZB can do is to cause a panic.
Some parts of this project's codebase, including parsing-related logic and associated test cases, are inspired by or derived from SABnzbd.
Thanks to the SABnzbd project and its contributors for their work. Related sections of code are annotated with comments pointing back to the original SABnzbd sources where appropriate.
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or https://opensource.org/license/MIT)
at your option.
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.