mirror of
https://codeberg.org/unspeaker/tengri.git
synced 2025-12-06 19:56:44 +01:00
60 lines
2.2 KiB
Rust
60 lines
2.2 KiB
Rust
#![feature(adt_const_params)]
|
|
#![feature(type_alias_impl_trait)]
|
|
#![feature(impl_trait_in_fn_trait_return)]
|
|
mod error; pub use self::error::*;
|
|
mod token; pub use self::token::*;
|
|
mod iter; pub use self::iter::*;
|
|
mod context; pub use self::context::*;
|
|
pub(crate) use self::Value::*;
|
|
pub(crate) use self::ParseError::*;
|
|
pub(crate) use konst::iter::{ConstIntoIter, IsIteratorKind};
|
|
pub(crate) use konst::string::{split_at, str_range, char_indices};
|
|
pub(crate) use std::fmt::Debug;
|
|
/// Static iteration helper.
|
|
#[macro_export] macro_rules! iterate {
|
|
($expr:expr => $arg: pat => $body:expr) => {
|
|
let mut iter = $expr;
|
|
while let Some(($arg, next)) = iter.next() {
|
|
$body;
|
|
iter = next;
|
|
}
|
|
}
|
|
}
|
|
/// Implement the const iterator pattern.
|
|
#[macro_export] macro_rules! const_iter {
|
|
($(<$l:lifetime>)?|$self:ident: $Struct:ty| => $Item:ty => $expr:expr) => {
|
|
impl$(<$l>)? Iterator for $Struct {
|
|
type Item = $Item;
|
|
fn next (&mut $self) -> Option<$Item> { $expr }
|
|
}
|
|
impl$(<$l>)? ConstIntoIter for $Struct {
|
|
type Kind = IsIteratorKind;
|
|
type Item = $Item;
|
|
type IntoIter = Self;
|
|
}
|
|
}
|
|
}
|
|
//#[cfg(test)] #[test] fn test_examples () -> Result<(), ParseError> {
|
|
//// Let's pretend to render some view.
|
|
//let source = include_str!("../../tek/src/view_arranger.edn");
|
|
//// The token iterator allows you to get the tokens represented by the source text.
|
|
//let mut view = TokenIter(source);
|
|
//// The token iterator wraps a const token+source iterator.
|
|
//assert_eq!(view.0.0, source);
|
|
//let mut expr = view.peek();
|
|
//assert_eq!(view.0.0, source);
|
|
//assert_eq!(expr, Some(Token {
|
|
//source, start: 0, length: source.len() - 1, value: Exp(0, SourceIter(&source[1..]))
|
|
//}));
|
|
////panic!("{view:?}");
|
|
////panic!("{:#?}", expr);
|
|
////for example in [
|
|
////include_str!("../../tui/examples/edn01.edn"),
|
|
////include_str!("../../tui/examples/edn02.edn"),
|
|
////] {
|
|
//////let items = Atom::read_all(example)?;
|
|
//////panic!("{layout:?}");
|
|
//////let content = <dyn ViewContext<::tengri_engine::tui::Tui>>::from(&layout);
|
|
////}
|
|
//Ok(())
|
|
//}
|