✨ Añade AutoDefault para derivar Default avanzado
This commit is contained in:
parent
bceb43e6d0
commit
3bb2355b4f
11 changed files with 303 additions and 8 deletions
|
@ -15,16 +15,34 @@
|
|||
//! y configurables, basadas en HTML, CSS y JavaScript.
|
||||
|
||||
mod maud;
|
||||
mod smart_default;
|
||||
|
||||
use proc_macro::TokenStream;
|
||||
use quote::quote;
|
||||
use syn::{parse_macro_input, DeriveInput};
|
||||
|
||||
/// Macro para escribir plantillas HTML ([Maud](https://docs.rs/maud)).
|
||||
/// Macro para escribir plantillas HTML (basada en [Maud](https://docs.rs/maud)).
|
||||
#[proc_macro]
|
||||
pub fn html(input: TokenStream) -> TokenStream {
|
||||
maud::expand(input.into()).into()
|
||||
}
|
||||
|
||||
/// Deriva [`Default`] con atributos personalizados (basada en
|
||||
/// [SmartDefault](https://docs.rs/smart-default)).
|
||||
///
|
||||
/// Al derivar una estructura con *AutoDefault* se genera automáticamente la implementación de
|
||||
/// [`Default`]. Aunque, a diferencia de un simple `#[derive(Default)]`, el atributo
|
||||
/// `#[derive(AutoDefault)]` permite usar anotaciones en los campos como `#[default = "..."]`,
|
||||
/// funcionando incluso en estructuras con campos que no implementan [`Default`] o en *enums*.
|
||||
#[proc_macro_derive(AutoDefault, attributes(default))]
|
||||
pub fn derive_auto_default(input: TokenStream) -> TokenStream {
|
||||
let input = parse_macro_input!(input as DeriveInput);
|
||||
match smart_default::body_impl::impl_my_derive(&input) {
|
||||
Ok(output) => output.into(),
|
||||
Err(error) => error.to_compile_error().into(),
|
||||
}
|
||||
}
|
||||
|
||||
/// Define una función `main` asíncrona como punto de entrada de `PageTop`.
|
||||
///
|
||||
/// # Ejemplos
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue