dsl: use only Dsl trait

This commit is contained in:
🪞👃🪞 2025-05-19 00:06:03 +03:00
parent 3bc739328e
commit 90f5699fff
11 changed files with 430 additions and 406 deletions

View file

@ -52,7 +52,7 @@ impl ToTokens for ViewDef {
}).collect();
let available: String = available.join(", ");
let error_msg = LitStr::new(
&format!("expected Sym(content), got: {{value:?}}, available: {available}"),
&format!("expected Sym(content), got: {{iter:?}}, available: {available}"),
Span::call_site()
);
for token in quote! {
@ -60,15 +60,16 @@ impl ToTokens for ViewDef {
/// Generated by [tengri_proc].
impl ::tengri::output::Content<#output> for #ident {
fn content (&self) -> impl Render<#output> {
// TODO move to self.view()
self.size.of(::tengri::output::View(self, self.config.view))
}
}
/// Generated by [tengri_proc].
impl<'state> ::tengri::output::ViewContext<'state, #output> for #ident {
fn get_content_sym <'source: 'state> (&'state self, value: &Value<'source>)
-> Option<RenderBox<'state, #output>>
fn get_content_sym <'source: 'state> (&'state self, iter: &mut TokenIter<'source>)
-> ::tengri::Perhaps<RenderBox<'state, #output>>
{
match value { #(#exposed)* _ => panic!(#error_msg) }
Ok(match iter.peek() { #(#exposed)* _ => panic!(#error_msg) })
}
}
} {
@ -80,21 +81,44 @@ impl ToTokens for ViewDef {
impl ToTokens for ViewArm {
fn to_tokens (&self, out: &mut TokenStream2) {
let Self(key, value) = self;
out.append(Punct::new(':', Joint));
out.append(Punct::new(':', Alone));
out.append(Ident::new("tengri", Span::call_site()));
out.append(Punct::new(':', Joint));
out.append(Punct::new(':', Alone));
out.append(Ident::new("dsl", Span::call_site()));
out.append(Punct::new(':', Joint));
out.append(Punct::new(':', Alone));
out.append(Ident::new("Value", Span::call_site()));
out.append(Punct::new(':', Joint));
out.append(Punct::new(':', Alone));
out.append(Ident::new("Sym", Span::call_site()));
out.append(Ident::new("Some", Span::call_site()));
out.append(Group::new(Delimiter::Parenthesis, {
let mut out = TokenStream2::new();
out.append(LitStr::new(key, Span::call_site()).token());
out.append(Punct::new(':', Joint));
out.append(Punct::new(':', Alone));
out.append(Ident::new("tengri", Span::call_site()));
out.append(Punct::new(':', Joint));
out.append(Punct::new(':', Alone));
out.append(Ident::new("dsl", Span::call_site()));
out.append(Punct::new(':', Joint));
out.append(Punct::new(':', Alone));
out.append(Ident::new("Token", Span::call_site()));
out.append(Group::new(Delimiter::Brace, {
let mut out = TokenStream2::new();
out.append(Ident::new("value", Span::call_site()));
out.append(Punct::new(':', Alone));
out.append(Punct::new(':', Joint));
out.append(Punct::new(':', Alone));
out.append(Ident::new("tengri", Span::call_site()));
out.append(Punct::new(':', Joint));
out.append(Punct::new(':', Alone));
out.append(Ident::new("dsl", Span::call_site()));
out.append(Punct::new(':', Joint));
out.append(Punct::new(':', Alone));
out.append(Ident::new("Value", Span::call_site()));
out.append(Punct::new(':', Joint));
out.append(Punct::new(':', Alone));
out.append(Ident::new("Sym", Span::call_site()));
out.append(Group::new(Delimiter::Parenthesis, {
let mut out = TokenStream2::new();
out.append(LitStr::new(key, Span::call_site()).token());
out
}));
out.append(Punct::new(',', Alone));
out.append(Punct::new('.', Joint));
out.append(Punct::new('.', Alone));
out
}));
out
}));
out.append(Punct::new('=', Joint));