mirror of
https://codeberg.org/unspeaker/tengri.git
synced 2025-12-06 11:46:42 +01:00
wip: dsl, output, input, proc, tui: sorting out give and take
Some checks are pending
/ build (push) Waiting to run
Some checks are pending
/ build (push) Waiting to run
This commit is contained in:
parent
5a2177cc77
commit
3e1084555b
10 changed files with 273 additions and 301 deletions
|
|
@ -9,9 +9,6 @@ pub(crate) struct ExposeMeta;
|
|||
#[derive(Debug, Clone)]
|
||||
pub(crate) struct ExposeImpl(ItemImpl, BTreeMap<ExposeType, BTreeMap<String, Ident>>);
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
struct ExposeArm(String, Ident);
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
struct ExposeSym(LitStr);
|
||||
|
||||
|
|
@ -82,13 +79,23 @@ impl ToTokens for ExposeImpl {
|
|||
},
|
||||
_ => quote! {},
|
||||
};
|
||||
let values = variants.iter().map(ExposeArm::from);
|
||||
let values = variants.iter().map(|(key, value)|{
|
||||
let key = LitStr::new(&key, Span::call_site());
|
||||
quote! { Some(::tengri::dsl::Value::Sym(#key)) => state.#value(), }
|
||||
});
|
||||
write_quote_to(out, quote! {
|
||||
/// Generated by [tengri_proc::expose].
|
||||
impl<'n> ::tengri::dsl::Give<'n, #t> for #state {
|
||||
fn give <'source: 'n> (
|
||||
&self, words: ::tengri::dsl::TokenIter<'source>
|
||||
) -> Perhaps<#t> {
|
||||
Take::take(self, words)
|
||||
}
|
||||
}
|
||||
/// Generated by [tengri_proc::expose].
|
||||
impl<'n> ::tengri::dsl::Take<'n, #state> for #t {
|
||||
fn take <'source> (
|
||||
state: &#state,
|
||||
words: &mut ::tengri::dsl::TokenIter<'source>
|
||||
fn take <'source: 'n> (
|
||||
state: &#state, mut words: ::tengri::dsl::TokenIter<'source>
|
||||
) -> Perhaps<Self> {
|
||||
Ok(Some(match words.next().map(|x|x.value) {
|
||||
#predefined
|
||||
|
|
@ -105,22 +112,6 @@ impl ToTokens for ExposeImpl {
|
|||
}
|
||||
}
|
||||
|
||||
impl From<(&String, &Ident)> for ExposeArm {
|
||||
fn from ((a, b): (&String, &Ident)) -> Self {
|
||||
Self(a.clone(), b.clone())
|
||||
}
|
||||
}
|
||||
|
||||
impl ToTokens for ExposeArm {
|
||||
fn to_tokens (&self, out: &mut TokenStream2) {
|
||||
let Self(key, value) = self;
|
||||
let key = LitStr::new(&key, Span::call_site());
|
||||
write_quote_to(out, quote! {
|
||||
Some(::tengri::dsl::Value::Sym(#key)) => state.#value(),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
impl From<LitStr> for ExposeSym { fn from (this: LitStr) -> Self { Self(this) } }
|
||||
|
||||
impl PartialOrd for ExposeSym {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue