2 unstable releases
0.2.0 | Nov 5, 2023 |
---|---|
0.1.0 | Aug 8, 2021 |
#1351 in Parser implementations
3,719 downloads per month
Used in 33 crates
(6 directly)
34KB
525 lines
keyvalues-parser
keyvalues-parser
uses pest
to parse
VDF text v1
files to an untyped Rust structure to ease manipulation and navigation. The
parser provides an untyped Vdf
representation as well as a linear
TokenStream
The library is primarily used in conjunction with
keyvalues-serde
which provides a more ergonomic (yet more limiting) means of dealing with VDF
text.
Installation
Just add the library to your Cargo.toml
[dependencies]
keyvalues-parser = "0.1.0"
Quickstart
const LOGIN_USERS_VDF: &str = r#"
"users"
{
"12345678901234567"
{
"AccountName" "ACCOUNT_NAME"
"PersonaName" "PERSONA_NAME"
"RememberPassword" "1"
"MostRecent" "1"
"Timestamp" "1234567890"
}
}
"#;
use keyvalues_parser::Vdf;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let vdf = Vdf::parse(LOGIN_USERS_VDF)?;
assert_eq!(
"12345678901234567",
vdf.value.unwrap_obj().keys().next().unwrap(),
);
Ok(())
}
Limitations
VDF text is drastically underspecified. This leads to the following liberties being taken
- Not respecting the ordering of key-value pairs, where the pairs are stored in a
BTreeMap
that sorts the values based on the key - Because of limitations in representing sequences, an empty
Vec
of values will be rendered as a missing keyvalue pair
Benchmarks
A set of basic benchmarks can be found in the benches directory
These just test timing and throughput for both parsing and rendering of a fairly typical VDF file
License
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 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
~2–2.8MB
~57K SLoC