mirror of
https://github.com/cargo-bins/cargo-binstall.git
synced 2025-04-20 20:48:43 +00:00

* leon: first implementation * Update crates/leon/src/values.rs Co-authored-by: Jiahao XU <Jiahao_XU@outlook.com> * Workaround orphan rules to make API more intuitive * Fmt * Clippy * Use CoW * Use cow for items too * Test that const construction works * leon: Initial attempt at O(n) parser * leon: finish parser (except escapes) * leon: Improve ergonomics of compile-time templates * Document helpers * leon: Docs tweaks * leon: Use macro to minimise parser tests * leon: add escapes to parser * leon: test escapes preceding keys * leon: add multibyte tests * leon: test escapes following keys * Format * Debug * leon: Don't actually need to keep track of the key * leon: Parse to vec first * leon: there's actually no need for string cows * leon: reorganise and redo macro now that there's no coww * Well that was silly * leon: Adjust text end when pushing * leon: catch unbalanced keys * Add error tests * leon: Catch unfinished escape * Comment out debugging * leon: fuzz * Clippy * leon: Box parse error * leon: &dyn instead of impl * Can't impl FromStr, so rename to parse * Add Vec<> to values * leon: Add benches for ways to supply values * leon: Add bench comparing to std and tt * Fix fuzz * Fmt * Split ParseError and RenderError * Make miette optional * Remove RenderError lifetime * Simplify ParseError type schema * Write concrete Values types instead of generics * Add license files * Reduce criterion deps * Make default a cow * Add a CLI leon tool * Fix tests * Clippy * Disable cli by default * Avoid failing the build when cli is off * Add to ci * Update crates/leon/src/main.rs Co-authored-by: Jiahao XU <Jiahao_XU@outlook.com> * Update crates/leon/Cargo.toml Co-authored-by: Jiahao XU <Jiahao_XU@outlook.com> * Bump version * Error not transparent * Diagnostic can do forwarding * Simplify error type * Expand doc examples * Generic Values for Hash and BTree maps * One more borrowed * Forward implementations * More generics * Add has_keys * Lock stdout in leon tool * No more debug comments in parser * Even more generics * Macros to reduce bench duplication * Further simplify error * Fix leon main * Stable support * Clippy --------- Co-authored-by: Jiahao XU <Jiahao_XU@outlook.com>
50 lines
1.3 KiB
Rust
50 lines
1.3 KiB
Rust
/// Construct a template constant without needing to make an items constant.
|
|
///
|
|
/// This is essentially a shorthand for:
|
|
///
|
|
/// ```
|
|
/// use leon::{Item, Template};
|
|
/// Template::new({
|
|
/// const ITEMS: &'static [Item<'static>] = &[Item::Text("Hello "), Item::Key("name")];
|
|
/// ITEMS
|
|
/// }, Some("world"));
|
|
/// ```
|
|
///
|
|
/// # Examples
|
|
///
|
|
/// ```
|
|
/// use leon::Item::*;
|
|
/// assert_eq!(
|
|
/// leon::template!(Text("Hello "), Key("name"))
|
|
/// .render(&[("name", "Магда Нахман")])
|
|
/// .unwrap(),
|
|
/// "Hello Магда Нахман",
|
|
/// );
|
|
/// ```
|
|
///
|
|
/// With a default:
|
|
///
|
|
/// ```
|
|
/// use leon::Item::*;
|
|
/// assert_eq!(
|
|
/// leon::template!(Text("Hello "), Key("name"); "M. P. T. Acharya")
|
|
/// .render(&[("city", "Madras")])
|
|
/// .unwrap(),
|
|
/// "Hello M. P. T. Acharya",
|
|
/// );
|
|
/// ```
|
|
#[macro_export]
|
|
macro_rules! template {
|
|
($($item:expr),* $(,)?) => {
|
|
$crate::Template::new({
|
|
const ITEMS: &'static [$crate::Item<'static>] = &[$($item),*];
|
|
ITEMS
|
|
}, ::core::option::Option::None)
|
|
};
|
|
($($item:expr),* $(,)? ; $default:expr) => {
|
|
$crate::Template::new({
|
|
const ITEMS: &'static [$crate::Item<'static>] = &[$($item),*];
|
|
ITEMS
|
|
}, ::core::option::Option::Some($default))
|
|
};
|
|
}
|