Crates.io | barf |
lib.rs | barf |
version | 1.0.0 |
source | src |
created_at | 2023-09-25 14:25:01.970925 |
updated_at | 2023-09-25 14:25:01.970925 |
description | Turn any input into "barf"-ed output. |
homepage | https://github.com/Vonr/barf |
repository | https://github.com/Vonr/barf |
max_upload_size | |
id | 982754 |
size | 20,615 |
Turn any input into "barf"-ed output.
The name is a play on the purpose of this crate as a deparser - the opposite of the fantastic nom crate.
Barf aims to have some integrations with common datatypes such as LEB128 encoded variable-length integers.
When these integrations require another crate, they will be locked behind feature flags.
These integrations include
For a full list, see Cargo.toml.
If you want to see more integrations, please open an issue, or preferably a pull request.
There is also nothing stopping you from implementing [Barfer
] on your own types and creating extension traits for them.
Barf can operate in no_std environments, but the "alloc" feature flag needs to be enabled for the default implementations of [Barfer
] for [Vec
] and [String
].
use barf::Barfer;
// Vec<T> implements Barfer<T>.
let mut buf: Vec<u8> = Vec::new();
// Push 42_u8
buf.single(42);
// Push "test".bytes() iterator with `many`
buf.many("test".bytes());
// Push 1, 2, and 3
buf.slice([1, 2, 3]);
assert_eq!(
&buf[..],
[
42, // 42_u8
116, 101, 115, 116, // Bytes in "test"
1, 2, 3, // 1, 2, and 3
]
);