[−][src]Crate cluConstData
Create and merge any persistent data at compile time. A nightly compiler version is required (this is not a compiler plugin).
Opportunities
- Combining any persistent arrays at compile time
- Combining any static strings at compile time
- Ability to combine generic constant data (but only with known types (with unknown types Rust cannot track generic relationships)).
- The library uses #! [no _ std]
Use
- Easy
#[macro_use] extern crate cluConstData; const_data! { const A: &'static [u8] = b"["; const B: &'static [u8] = b"]."; pub (crate) const ARRAY: &'static [u8] = A, b"User", B, b" "; } fn main() { assert_eq!(A, b"["); assert_eq!(B, b"]."); println!("#1 {}", std::str::from_utf8(ARRAY).unwrap()); assert_eq!(ARRAY, b"[User]. "); }
- EasyStr
#[macro_use] extern crate cluConstData; const_data! { const A: &'static str = "["; const B: &'static str = "]"; pub (crate) const RESULT: &'static str = A, "DATA", B; } fn main() { assert_eq!(A, "["); assert_eq!(B, "]"); println!("#1 {}", RESULT); assert_eq!(RESULT, "[DATA]"); }
- EasyArray
#[macro_use] extern crate cluConstData; const_data! { const U32_HEAD: u32 = 255; const U32_END: u32 = 0; const U32_ARRAY: [u32; 3] = &[U32_HEAD], &[2], &[U32_END]; const U32_SARRAY: &'static [u32] = &[U32_HEAD, 2, 3 ,4], &[2, 3], &[U32_END]; } fn main() { println!("#1 {:?}", U32_HEAD); assert_eq!(U32_HEAD, 255); println!("#2 {:?}", U32_END); assert_eq!(U32_END, 0); //result println!("#3 {:?}", U32_ARRAY); assert_eq!(U32_ARRAY, [255, 2, 0]); println!("#4 {:?}", U32_SARRAY); assert_eq!(U32_SARRAY, [255, 2, 3, 4, 2, 3, 0]); }
- DynGeneric
#[macro_use] extern crate cluConstData; use std::marker::PhantomData; pub trait TypeTrait { const TYPE: &'static str; #[inline] fn as_type_str() -> &'static str { Self::TYPE } } impl TypeTrait for usize { const TYPE: &'static str = "usize"; } impl TypeTrait for (usize, usize) { const_data! { const TYPE: &'static str = usize::TYPE, " + ", usize::TYPE; } } impl TypeTrait for (PhantomData<()>, usize) { const_data! { const TYPE: &'static str = "PhantomData<()>", " + ", usize::TYPE; } } fn main() { println!("#1 {:?}", usize::as_type_str()); assert_eq!(usize::as_type_str(), "usize"); println!("#2 {:?}", <(usize, usize)>::as_type_str()); assert_eq!(<(usize, usize)>::as_type_str(), "usize + usize"); }
License
Copyright 2019 #UlinProject Denis Kotlyarov (Денис Котляров)
Licensed under the Apache License, Version 2.0
Macros
const_data | The safe and recommended method of the description of constant data. |
const_single_data | Safe constructor of constants and uniques without binding to data name.. |
let_single_data | Safe constructor of constants and uniques without binding to data name.. |
Functions
const_concat⚠ | Very coarse concatenation, use safe macros such as 'const_data' !! |