Crates.io | fixed_len_str |
lib.rs | fixed_len_str |
version | 0.3.3 |
source | src |
created_at | 2020-01-06 05:36:13.051546 |
updated_at | 2020-01-30 13:13:37.583902 |
description | A procedural macro for create a smart pointer to str backed by a fixed size array,with the size given by the tokens. |
homepage | |
repository | https://github.com/NonNullableName/fixed_len_str |
max_upload_size | |
id | 195696 |
size | 51,614 |
This Rust library provides a procedural macro for declare a wrapper struct for an array with the size given by the tokens which derefs to str
.
For a proper API documentation of one of length 12 see fixed_len_str_example.
If you want to use serde to serialize and deserialize the fixed_len_str use
features = ["serde_support"]
,if you want to match a pattern of type
FnMut(FixedStr$len) -> bool
on a str
use features = ["pattern_pred_support"]
and if you want the documentation visible at the expansion use default-features = false
.
use fixed_len_str::fixed_len_str;
fixed_len_str!(3);
fn main() {
let string = FixedStr3::from("abc");
assert_eq!(string, "abc");
let string = unsafe { FixedStr3::new_unchecked(*b"abc") };
assert_eq!(string, "abc");
let mut string = FixedStr3::default(); // equivalent to mem::zeroed but safe
string.fill_str("abc");
assert_eq!(string, "abc");
let mut string = unsafe { FixedStr3::new_unchecked([b'a', b'b', 0]) };
assert_eq!(string, "ab");
string.fill_char('c');
assert_eq!(string, "abc");
assert_eq!(string.as_bytes(), (&string[..]).as_bytes()); // this is only certain with non-zero bytes
assert_eq!(string.into_string(), String::from(&string[..])); // clone or consume at your option
assert_eq!(FixedStr3::from(&[][..]), "");
if cfg!(feature = "pattern_pred_support") {
use fixed_str3::Closure; // needed due to the orphan rule
assert_eq!("aaabb".matches(Closure::from(|s: FixedStr3| s == "aaa" || s == "bb"))
.collect::<Vec<&str>>(), ["aaa", "bb"]);
}
}