fix(dsl): tail condition

This commit is contained in:
🪞👃🪞 2025-07-31 21:00:13 +03:00
parent 85c305385b
commit 9e0b7be9a9

View file

@ -6,19 +6,13 @@
extern crate const_panic; extern crate const_panic;
use const_panic::PanicFmt; use const_panic::PanicFmt;
use std::fmt::Debug; use std::fmt::Debug;
pub(crate) use std::error::Error; pub(crate) use std::error::Error;
pub(crate) use std::sync::Arc; pub(crate) use std::sync::Arc;
pub(crate) use konst::string::{str_range, char_indices}; pub(crate) use konst::string::{str_range, char_indices};
pub(crate) use thiserror::Error; pub(crate) use thiserror::Error;
pub(crate) use ::tengri_core::*; pub(crate) use ::tengri_core::*;
pub(crate) use self::DslError::*; pub(crate) use self::DslError::*;
mod dsl_conv; pub use self::dsl_conv::*;
mod dsl_conv;
pub use self::dsl_conv::*;
mod dsl_parse; mod dsl_parse;
pub(crate) use self::dsl_parse::*; pub(crate) use self::dsl_parse::*;
pub mod parse { pub use crate::dsl_parse::*; } pub mod parse { pub use crate::dsl_parse::*; }
@ -47,11 +41,20 @@ pub trait DslExp: Dsl {
Ok(exp_peek(self.src())?) Ok(exp_peek(self.src())?)
} }
fn head (&self) -> DslPerhaps<&str> { fn head (&self) -> DslPerhaps<&str> {
Ok(peek(&self.src()[1..])?) let start = 1;
let src = self.src();
let src = &src[start.min(src.len().saturating_sub(1))..];
peek(src)
} }
fn tail (&self) -> DslPerhaps<&str> { fn tail (&self) -> DslPerhaps<&str> {
Ok(if let Some((head_start, head_len)) = seek(&self.src()[1..])? { let start = 1;
peek(&self.src()[(1+head_start+head_len)..])? let src = self.src();
let src = &src[start.min(src.len().saturating_sub(1))..];
Ok(if let Some((head_start, head_len)) = seek(src)? {
let start = 1 + head_start + head_len;
let src = self.src();
let src = &src[start.min(src.len().saturating_sub(1))..];
peek(src)?
} else { } else {
None None
}) })