#parser #field #structured #values #rfc #input #data

sfparse

RFC 9651 Structured Field Values parser

2 releases

new 0.1.1 Dec 14, 2024
0.1.0 Dec 14, 2024

#1221 in Algorithms

Download history 210/week @ 2024-12-09

210 downloads per month

MIT license

125KB
956 lines

sfparse-rs

sfparse-rs is RFC 9651 Structured Field Values parser written in Rust. It is the port of sfparse written in C.

It is designed not to do any extra allocation, like allocating maps, lists, and Strings, and do the minimal stuff to parse the input data.

use sfparse::{Parser, Value};

let mut urgency :i32 = 3;
let mut incremental = false;
let mut p = Parser::new("u=2, i".as_bytes());

loop {
    match p.parse_dict().unwrap() {
        None => break,
        Some(("u", Value::Integer(v))) if (0i64..=7i64).contains(&v) => urgency = v as i32,
        Some(("i", Value::Bool(v))) => incremental = v,
        _ => (),
    }
}

println!("urgency={urgency} incremental={incremental}");

License

The MIT License

Copyright (c) 2024 sfparse-rs contributors


lib.rs:

RFC 9651 Structured Field Values parser.

Provides Structured Field Values parser that is designed not to do any extra allocation, like allocating maps, lists, and Strings, and do the minimal stuff to parse the input data.

This is an example of parsing RFC 9218 Priority header field:

use sfparse::{Parser, Value};

let mut urgency :i32 = 3;
let mut incremental = false;
let mut p = Parser::new("u=2, i".as_bytes());

loop {
    match p.parse_dict().unwrap() {
        None => break,
        Some(("u", Value::Integer(v))) if (0i64..=7i64).contains(&v) => urgency = v as i32,
        Some(("i", Value::Bool(v))) => incremental = v,
        _ => (),
    }
}

println!("urgency={urgency} incremental={incremental}");

No runtime deps