mirror of
https://codeberg.org/unspeaker/tengri.git
synced 2025-12-06 03:36:42 +01:00
21 lines
783 B
Rust
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)}}
|
|
}
|