tengri/dsl/src/dsl_src.rs
2025-08-16 16:28:24 +03:00

21 lines
783 B
Rust

use crate::*;
// Designates a string as parsable DSL.
flex_trait!(Dsl: Debug + Send + Sync + Sized {
fn src (&self) -> DslPerhaps<&str> { unreachable!("Dsl::src default impl") }
});
// Some things that can be DSL source:
impl Dsl for String {
fn src (&self) -> DslPerhaps<&str> { Ok(Some(self.as_ref())) }
}
impl Dsl for Arc<str> {
fn src (&self) -> DslPerhaps<&str> { Ok(Some(self.as_ref())) }
}
impl<'s> Dsl for &'s str {
fn src (&self) -> DslPerhaps<&str> { Ok(Some(self.as_ref())) }
}
impl<D: Dsl> Dsl for Option<D> {
fn src (&self) -> DslPerhaps<&str> {Ok(if let Some(dsl) = self { dsl.src()? } else { None })}
}
impl<D: Dsl> Dsl for Result<D, DslError> {
fn src (&self) -> DslPerhaps<&str> {match self {Ok(dsl) => Ok(dsl.src()?), Err(e) => Err(*e)}}
}