diff --git a/pagetop/Cargo.toml b/pagetop/Cargo.toml index ded5f7f1..5c6b9530 100644 --- a/pagetop/Cargo.toml +++ b/pagetop/Cargo.toml @@ -40,6 +40,7 @@ itoa = "1.0.9" nom = "7.1.3" once_cell = "1.18.0" paste = "1.0.14" +smart-default = "0.7.1" substring = "1.4.5" term_size = "0.3.2" toml = "0.8.8" diff --git a/pagetop/src/base/component.rs b/pagetop/src/base/component.rs index ca3f5594..2064d0b4 100644 --- a/pagetop/src/base/component.rs +++ b/pagetop/src/base/component.rs @@ -1,6 +1,6 @@ use crate::core::component::{Context, ContextOp}; use crate::html::{JavaScript, StyleSheet}; -use crate::Weight; +use crate::{SmartDefault, Weight}; // Context parameters. pub const PARAM_BASE_WEIGHT: &str = "base.weight"; @@ -57,7 +57,7 @@ pub(crate) fn add_base_assets(cx: &mut Context) { // ************************************************************************************************* #[rustfmt::skip] -#[derive(Default)] +#[derive(SmartDefault)] pub enum BreakPoint { #[default] None, /* Does not apply. Rest initially assume 1 pixel = 0.0625em */ @@ -88,7 +88,7 @@ impl ToString for BreakPoint { // ************************************************************************************************* -#[derive(Default)] +#[derive(SmartDefault)] pub enum FontSize { ExtraLarge, XxLarge, diff --git a/pagetop/src/base/component/block.rs b/pagetop/src/base/component/block.rs index ab23a726..976d3c96 100644 --- a/pagetop/src/base/component/block.rs +++ b/pagetop/src/base/component/block.rs @@ -1,7 +1,7 @@ use crate::prelude::*; #[rustfmt::skip] -#[derive(Default)] +#[derive(SmartDefault)] pub struct Block { id : OptionId, weight : Weight, diff --git a/pagetop/src/base/component/branding.rs b/pagetop/src/base/component/branding.rs index d5149d25..f14430d0 100644 --- a/pagetop/src/base/component/branding.rs +++ b/pagetop/src/base/component/branding.rs @@ -1,31 +1,19 @@ use crate::prelude::*; #[rustfmt::skip] +#[derive(SmartDefault)] pub struct Branding { id : OptionId, weight : Weight, renderable: Renderable, + #[default(_code = "config::SETTINGS.app.name.to_owned()")] app_name : String, slogan : OptionTranslated, - logo : ArcTypedComponent, + logo : OptionComponent, + #[default(_code = "|_| \"/\"")] frontpage : FnContextualPath, } -#[rustfmt::skip] -impl Default for Branding { - fn default() -> Self { - Branding { - id : OptionId::default(), - weight : Weight::default(), - renderable: Renderable::default(), - app_name : config::SETTINGS.app.name.to_owned(), - slogan : OptionTranslated::default(), - logo : ArcTypedComponent::::default(), - frontpage : |_| "/", - } - } -} - impl_handle!(COMPONENT_BASE_BRANDING for Branding); impl ComponentTrait for Branding { diff --git a/pagetop/src/base/component/button.rs b/pagetop/src/base/component/button.rs index 88e5917d..57d5f6dc 100644 --- a/pagetop/src/base/component/button.rs +++ b/pagetop/src/base/component/button.rs @@ -1,6 +1,6 @@ use crate::prelude::*; -#[derive(Default)] +#[derive(SmartDefault)] pub enum ButtonType { #[default] Link, @@ -17,7 +17,7 @@ impl ToString for ButtonType { } } -#[derive(Default)] +#[derive(SmartDefault)] pub enum ButtonTarget { #[default] Default, @@ -27,10 +27,8 @@ pub enum ButtonTarget { Context(String), } -type ButtonIcon = ArcTypedComponent; - #[rustfmt::skip] -#[derive(Default)] +#[derive(SmartDefault)] pub struct Button { id : OptionId, weight : Weight, diff --git a/pagetop/src/base/component/flex.rs b/pagetop/src/base/component/flex.rs index 2eb2a78f..29bed8ec 100644 --- a/pagetop/src/base/component/flex.rs +++ b/pagetop/src/base/component/flex.rs @@ -7,7 +7,7 @@ use crate::prelude::*; // ************************************************************************************************* -#[derive(Default)] +#[derive(SmartDefault)] pub enum Direction { #[default] Default, @@ -42,7 +42,7 @@ impl ToString for Direction { // ************************************************************************************************* -#[derive(Default)] +#[derive(SmartDefault)] pub enum WrapAlign { #[default] Default, @@ -65,7 +65,7 @@ impl ToString for WrapAlign { // ************************************************************************************************* -#[derive(Default)] +#[derive(SmartDefault)] pub enum ContentAlign { #[default] Default, @@ -94,7 +94,7 @@ impl ToString for ContentAlign { // ************************************************************************************************* -#[derive(Default)] +#[derive(SmartDefault)] pub enum ContentJustify { #[default] Default, @@ -123,7 +123,7 @@ impl ToString for ContentJustify { // ************************************************************************************************* -#[derive(Default)] +#[derive(SmartDefault)] pub enum ItemAlign { #[default] Default, @@ -150,7 +150,7 @@ impl ToString for ItemAlign { // ************************************************************************************************* -#[derive(Default)] +#[derive(SmartDefault)] pub enum Gap { #[default] Default, @@ -175,7 +175,7 @@ impl ToString for Gap { // ************************************************************************************************* -#[derive(Default)] +#[derive(SmartDefault)] pub enum ItemGrow { #[default] Default, @@ -210,7 +210,7 @@ impl ToString for ItemGrow { // ************************************************************************************************* -#[derive(Default)] +#[derive(SmartDefault)] pub enum ItemShrink { #[default] Default, @@ -245,7 +245,7 @@ impl ToString for ItemShrink { // ************************************************************************************************* -#[derive(Default)] +#[derive(SmartDefault)] pub enum ItemSize { #[default] Default, @@ -284,7 +284,7 @@ impl ToString for ItemSize { // ************************************************************************************************* -#[derive(Default)] +#[derive(SmartDefault)] pub enum ItemOffset { #[default] Default, diff --git a/pagetop/src/base/component/flex/container.rs b/pagetop/src/base/component/flex/container.rs index 83912eec..e4c04de8 100644 --- a/pagetop/src/base/component/flex/container.rs +++ b/pagetop/src/base/component/flex/container.rs @@ -1,7 +1,7 @@ use crate::prelude::*; #[rustfmt::skip] -#[derive(Default)] +#[derive(SmartDefault)] pub struct Container { id : OptionId, weight : Weight, diff --git a/pagetop/src/base/component/flex/item.rs b/pagetop/src/base/component/flex/item.rs index 35808918..b0131090 100644 --- a/pagetop/src/base/component/flex/item.rs +++ b/pagetop/src/base/component/flex/item.rs @@ -1,7 +1,7 @@ use crate::prelude::*; #[rustfmt::skip] -#[derive(Default)] +#[derive(SmartDefault)] pub struct Item { id : OptionId, weight : Weight, diff --git a/pagetop/src/base/component/form/button.rs b/pagetop/src/base/component/form/button.rs index e64c3fc1..a24f290f 100644 --- a/pagetop/src/base/component/form/button.rs +++ b/pagetop/src/base/component/form/button.rs @@ -1,6 +1,6 @@ use crate::prelude::*; -#[derive(Default)] +#[derive(SmartDefault)] pub enum ButtonType { #[default] Button, @@ -20,7 +20,7 @@ impl ToString for ButtonType { } #[rustfmt::skip] -#[derive(Default)] +#[derive(SmartDefault)] pub struct Button { weight : Weight, renderable : Renderable, diff --git a/pagetop/src/base/component/form/date.rs b/pagetop/src/base/component/form/date.rs index 08b47e40..7893c5a6 100644 --- a/pagetop/src/base/component/form/date.rs +++ b/pagetop/src/base/component/form/date.rs @@ -1,7 +1,7 @@ use crate::prelude::*; #[rustfmt::skip] -#[derive(Default)] +#[derive(SmartDefault)] pub struct Date { weight : Weight, renderable : Renderable, diff --git a/pagetop/src/base/component/form/form_main.rs b/pagetop/src/base/component/form/form_main.rs index e0ee24fa..6565d22e 100644 --- a/pagetop/src/base/component/form/form_main.rs +++ b/pagetop/src/base/component/form/form_main.rs @@ -1,6 +1,6 @@ use crate::prelude::*; -#[derive(Default)] +#[derive(SmartDefault)] pub enum FormMethod { #[default] Post, @@ -8,7 +8,7 @@ pub enum FormMethod { } #[rustfmt::skip] -#[derive(Default)] +#[derive(SmartDefault)] pub struct Form { id : OptionId, weight : Weight, diff --git a/pagetop/src/base/component/form/hidden.rs b/pagetop/src/base/component/form/hidden.rs index 9a809295..f774317c 100644 --- a/pagetop/src/base/component/form/hidden.rs +++ b/pagetop/src/base/component/form/hidden.rs @@ -1,7 +1,7 @@ use crate::prelude::*; #[rustfmt::skip] -#[derive(Default)] +#[derive(SmartDefault)] pub struct Hidden { weight: Weight, name : OptionName, diff --git a/pagetop/src/base/component/form/input.rs b/pagetop/src/base/component/form/input.rs index 4e8ec54e..b5d906d7 100644 --- a/pagetop/src/base/component/form/input.rs +++ b/pagetop/src/base/component/form/input.rs @@ -1,6 +1,6 @@ use crate::prelude::*; -#[derive(Default)] +#[derive(SmartDefault)] pub enum InputType { #[default] Textfield, @@ -12,7 +12,7 @@ pub enum InputType { } #[rustfmt::skip] -#[derive(Default)] +#[derive(SmartDefault)] pub struct Input { weight : Weight, renderable : Renderable, diff --git a/pagetop/src/base/component/heading.rs b/pagetop/src/base/component/heading.rs index e4ccbbe5..181e9b6a 100644 --- a/pagetop/src/base/component/heading.rs +++ b/pagetop/src/base/component/heading.rs @@ -1,6 +1,6 @@ use crate::prelude::*; -#[derive(Default)] +#[derive(SmartDefault)] pub enum HeadingType { #[default] H1, @@ -11,7 +11,7 @@ pub enum HeadingType { H6, } -#[derive(Default)] +#[derive(SmartDefault)] pub enum HeadingDisplay { ExtraLarge, XxLarge, @@ -39,7 +39,7 @@ impl ToString for HeadingDisplay { } #[rustfmt::skip] -#[derive(Default)] +#[derive(SmartDefault)] pub struct Heading { id : OptionId, weight : Weight, diff --git a/pagetop/src/base/component/html.rs b/pagetop/src/base/component/html.rs index 7105e715..0d7e04f8 100644 --- a/pagetop/src/base/component/html.rs +++ b/pagetop/src/base/component/html.rs @@ -1,6 +1,6 @@ use crate::prelude::*; -#[derive(Default)] +#[derive(SmartDefault)] pub struct Html(Markup); impl_handle!(COMPONENT_BASE_HTML for Html); diff --git a/pagetop/src/base/component/icon.rs b/pagetop/src/base/component/icon.rs index 8257fdfe..ffb028e7 100644 --- a/pagetop/src/base/component/icon.rs +++ b/pagetop/src/base/component/icon.rs @@ -1,7 +1,7 @@ use crate::prelude::*; #[rustfmt::skip] -#[derive(Default)] +#[derive(SmartDefault)] pub struct Icon { weight : Weight, renderable: Renderable, diff --git a/pagetop/src/base/component/image.rs b/pagetop/src/base/component/image.rs index 0c404944..360c01e8 100644 --- a/pagetop/src/base/component/image.rs +++ b/pagetop/src/base/component/image.rs @@ -3,7 +3,7 @@ use crate::prelude::*; const IMG_FLUID: &str = "pt-img__fluid"; const IMG_FIXED: &str = "pt-img__fixed"; -#[derive(Default)] +#[derive(SmartDefault)] pub enum ImageSize { #[default] Auto, @@ -14,7 +14,7 @@ pub enum ImageSize { } #[rustfmt::skip] -#[derive(Default)] +#[derive(SmartDefault)] pub struct Image { id : OptionId, weight : Weight, diff --git a/pagetop/src/base/component/menu/element.rs b/pagetop/src/base/component/menu/element.rs index c7f6181d..c01c0f49 100644 --- a/pagetop/src/base/component/menu/element.rs +++ b/pagetop/src/base/component/menu/element.rs @@ -5,7 +5,7 @@ use super::Submenu; type Content = ArcTypedComponent; type SubmenuItems = ArcTypedComponent; -#[derive(Default)] +#[derive(SmartDefault)] pub enum ElementType { #[default] Void, @@ -16,7 +16,7 @@ pub enum ElementType { // Element. #[rustfmt::skip] -#[derive(Default)] +#[derive(SmartDefault)] pub struct Element { weight : Weight, renderable : Renderable, diff --git a/pagetop/src/base/component/menu/group.rs b/pagetop/src/base/component/menu/group.rs index de88ccb2..906cb638 100644 --- a/pagetop/src/base/component/menu/group.rs +++ b/pagetop/src/base/component/menu/group.rs @@ -3,7 +3,7 @@ use crate::prelude::*; use super::Element; #[rustfmt::skip] -#[derive(Default)] +#[derive(SmartDefault)] pub struct Group { id : OptionId, weight : Weight, diff --git a/pagetop/src/base/component/menu/item.rs b/pagetop/src/base/component/menu/item.rs index 13b10e9e..ff50696a 100644 --- a/pagetop/src/base/component/menu/item.rs +++ b/pagetop/src/base/component/menu/item.rs @@ -7,7 +7,7 @@ type Content = ArcTypedComponent; type SubmenuItems = ArcTypedComponent; type MegamenuGroups = ArcTypedComponent; -#[derive(Default)] +#[derive(SmartDefault)] pub enum ItemType { #[default] Void, @@ -22,7 +22,7 @@ pub enum ItemType { // Item. #[rustfmt::skip] -#[derive(Default)] +#[derive(SmartDefault)] pub struct Item { weight : Weight, renderable : Renderable, diff --git a/pagetop/src/base/component/menu/megamenu.rs b/pagetop/src/base/component/menu/megamenu.rs index c7a1783f..7ec224d9 100644 --- a/pagetop/src/base/component/menu/megamenu.rs +++ b/pagetop/src/base/component/menu/megamenu.rs @@ -3,7 +3,7 @@ use crate::prelude::*; use super::Group; #[rustfmt::skip] -#[derive(Default)] +#[derive(SmartDefault)] pub struct Megamenu { id : OptionId, weight : Weight, diff --git a/pagetop/src/base/component/menu/menu_main.rs b/pagetop/src/base/component/menu/menu_main.rs index ac053b67..a670be8a 100644 --- a/pagetop/src/base/component/menu/menu_main.rs +++ b/pagetop/src/base/component/menu/menu_main.rs @@ -3,7 +3,7 @@ use crate::prelude::*; use super::Item; #[rustfmt::skip] -#[derive(Default)] +#[derive(SmartDefault)] pub struct Menu { id : OptionId, weight : Weight, diff --git a/pagetop/src/base/component/menu/submenu.rs b/pagetop/src/base/component/menu/submenu.rs index d8743e6a..caf3f1ec 100644 --- a/pagetop/src/base/component/menu/submenu.rs +++ b/pagetop/src/base/component/menu/submenu.rs @@ -3,7 +3,7 @@ use crate::prelude::*; use super::Item; #[rustfmt::skip] -#[derive(Default)] +#[derive(SmartDefault)] pub struct Submenu { id : OptionId, weight : Weight, diff --git a/pagetop/src/base/component/paragraph.rs b/pagetop/src/base/component/paragraph.rs index caa41443..2ff74fd7 100644 --- a/pagetop/src/base/component/paragraph.rs +++ b/pagetop/src/base/component/paragraph.rs @@ -1,7 +1,7 @@ use crate::prelude::*; #[rustfmt::skip] -#[derive(Default)] +#[derive(SmartDefault)] pub struct Paragraph { id : OptionId, weight : Weight, diff --git a/pagetop/src/base/component/powered_by.rs b/pagetop/src/base/component/powered_by.rs index 4e87dd70..0f0991b5 100644 --- a/pagetop/src/base/component/powered_by.rs +++ b/pagetop/src/base/component/powered_by.rs @@ -11,7 +11,7 @@ pub enum PoweredByLogo { } #[rustfmt::skip] -#[derive(Default)] +#[derive(SmartDefault)] pub struct PoweredBy { weight : Weight, renderable: Renderable, diff --git a/pagetop/src/base/component/translate.rs b/pagetop/src/base/component/translate.rs index dd41c215..b32b1b64 100644 --- a/pagetop/src/base/component/translate.rs +++ b/pagetop/src/base/component/translate.rs @@ -1,6 +1,6 @@ use crate::prelude::*; -#[derive(Default)] +#[derive(SmartDefault)] pub struct Translate(L10n); impl_handle!(COMPONENT_BASE_TRANSLATE for Translate); diff --git a/pagetop/src/base/component/wrapper.rs b/pagetop/src/base/component/wrapper.rs index 4102fb44..25fa7eff 100644 --- a/pagetop/src/base/component/wrapper.rs +++ b/pagetop/src/base/component/wrapper.rs @@ -1,6 +1,6 @@ use crate::prelude::*; -#[derive(Default)] +#[derive(SmartDefault)] pub enum WrapperType { #[default] Container, @@ -11,7 +11,7 @@ pub enum WrapperType { } #[rustfmt::skip] -#[derive(Default)] +#[derive(SmartDefault)] pub struct Wrapper { id : OptionId, weight : Weight, diff --git a/pagetop/src/core/action/list.rs b/pagetop/src/core/action/list.rs index 12a75ec8..617e9b95 100644 --- a/pagetop/src/core/action/list.rs +++ b/pagetop/src/core/action/list.rs @@ -1,10 +1,11 @@ use crate::core::action::ActionTrait; +use crate::SmartDefault; use std::sync::{Arc, RwLock}; pub type Action = Box; -#[derive(Default)] +#[derive(SmartDefault)] pub struct ActionsList(Arc>>); impl ActionsList { diff --git a/pagetop/src/core/component/renderable.rs b/pagetop/src/core/component/renderable.rs index 27d630eb..2b0dcb68 100644 --- a/pagetop/src/core/component/renderable.rs +++ b/pagetop/src/core/component/renderable.rs @@ -1,19 +1,14 @@ use crate::core::component::Context; +use crate::SmartDefault; pub type FnIsRenderable = fn(cx: &Context) -> bool; +#[derive(SmartDefault)] pub struct Renderable { + #[default(_code = "render_always")] pub check: FnIsRenderable, } -impl Default for Renderable { - fn default() -> Self { - Renderable { - check: render_always, - } - } -} - fn render_always(_cx: &Context) -> bool { true } diff --git a/pagetop/src/core/theme/regions.rs b/pagetop/src/core/theme/regions.rs index 548185bd..688a6553 100644 --- a/pagetop/src/core/theme/regions.rs +++ b/pagetop/src/core/theme/regions.rs @@ -1,6 +1,6 @@ use crate::core::component::{AnyComponents, ArcAnyComponent, ArcAnyOp}; use crate::core::theme::ThemeRef; -use crate::{Handle, LazyStatic}; +use crate::{Handle, LazyStatic, SmartDefault}; use std::collections::HashMap; use std::sync::RwLock; @@ -11,7 +11,7 @@ static THEME_REGIONS: LazyStatic>> = static COMMON_REGIONS: LazyStatic> = LazyStatic::new(|| RwLock::new(ComponentsRegions::default())); -#[derive(Default)] +#[derive(SmartDefault)] pub struct ComponentsRegions(HashMap<&'static str, AnyComponents>); impl ComponentsRegions { diff --git a/pagetop/src/html/assets.rs b/pagetop/src/html/assets.rs index 92e91d9f..503fbcf9 100644 --- a/pagetop/src/html/assets.rs +++ b/pagetop/src/html/assets.rs @@ -4,7 +4,7 @@ pub mod javascript; pub mod stylesheet; use crate::html::{html, Markup}; -use crate::Weight; +use crate::{SmartDefault, Weight}; pub trait AssetsTrait { fn path(&self) -> &str; @@ -14,7 +14,7 @@ pub trait AssetsTrait { fn prepare(&self) -> Markup; } -#[derive(Default)] +#[derive(SmartDefault)] pub struct Assets(Vec); impl Assets { diff --git a/pagetop/src/html/assets/headscript.rs b/pagetop/src/html/assets/headscript.rs index 51c649ce..ec7d6390 100644 --- a/pagetop/src/html/assets/headscript.rs +++ b/pagetop/src/html/assets/headscript.rs @@ -1,9 +1,9 @@ use crate::html::assets::AssetsTrait; use crate::html::{html, Markup}; -use crate::Weight; +use crate::{SmartDefault, Weight}; #[rustfmt::skip] -#[derive(Default)] +#[derive(SmartDefault)] pub struct HeadScript { path : String, code : String, diff --git a/pagetop/src/html/assets/headstyles.rs b/pagetop/src/html/assets/headstyles.rs index 1a00430e..ecdd01e9 100644 --- a/pagetop/src/html/assets/headstyles.rs +++ b/pagetop/src/html/assets/headstyles.rs @@ -1,9 +1,9 @@ use crate::html::assets::AssetsTrait; use crate::html::{html, Markup}; -use crate::Weight; +use crate::{SmartDefault, Weight}; #[rustfmt::skip] -#[derive(Default)] +#[derive(SmartDefault)] pub struct HeadStyles { path : String, styles: String, diff --git a/pagetop/src/html/assets/javascript.rs b/pagetop/src/html/assets/javascript.rs index 526ab412..dbe54d43 100644 --- a/pagetop/src/html/assets/javascript.rs +++ b/pagetop/src/html/assets/javascript.rs @@ -1,6 +1,6 @@ use crate::html::assets::AssetsTrait; use crate::html::{html, Markup}; -use crate::Weight; +use crate::{SmartDefault, Weight}; #[derive(Default, Eq, PartialEq)] pub enum ModeJS { @@ -11,7 +11,7 @@ pub enum ModeJS { } #[rustfmt::skip] -#[derive(Default)] +#[derive(SmartDefault)] pub struct JavaScript { path : String, prefix : &'static str, diff --git a/pagetop/src/html/assets/stylesheet.rs b/pagetop/src/html/assets/stylesheet.rs index b670f21e..3974010c 100644 --- a/pagetop/src/html/assets/stylesheet.rs +++ b/pagetop/src/html/assets/stylesheet.rs @@ -1,6 +1,6 @@ use crate::html::assets::AssetsTrait; use crate::html::{html, Markup}; -use crate::Weight; +use crate::{SmartDefault, Weight}; pub enum TargetMedia { Default, @@ -10,7 +10,7 @@ pub enum TargetMedia { } #[rustfmt::skip] -#[derive(Default)] +#[derive(SmartDefault)] pub struct StyleSheet { path : String, prefix : &'static str, diff --git a/pagetop/src/html/favicon.rs b/pagetop/src/html/favicon.rs index 651b476b..490e98ce 100644 --- a/pagetop/src/html/favicon.rs +++ b/pagetop/src/html/favicon.rs @@ -1,6 +1,7 @@ use crate::html::{html, Markup}; +use crate::SmartDefault; -#[derive(Default)] +#[derive(SmartDefault)] pub struct Favicon(Vec); impl Favicon { diff --git a/pagetop/src/html/opt_classes.rs b/pagetop/src/html/opt_classes.rs index e92ccf3e..acddcf50 100644 --- a/pagetop/src/html/opt_classes.rs +++ b/pagetop/src/html/opt_classes.rs @@ -9,7 +9,7 @@ //! **OptionClasses** assumes that the order of the classes is irrelevant //! (), and duplicate classes will not be allowed. -use crate::fn_builder; +use crate::{fn_builder, SmartDefault}; pub enum ClassesOp { Add, @@ -20,7 +20,7 @@ pub enum ClassesOp { Clear, } -#[derive(Default)] +#[derive(SmartDefault)] pub struct OptionClasses(Vec); impl OptionClasses { diff --git a/pagetop/src/html/opt_id.rs b/pagetop/src/html/opt_id.rs index 22cd8e69..2022f16d 100644 --- a/pagetop/src/html/opt_id.rs +++ b/pagetop/src/html/opt_id.rs @@ -1,6 +1,6 @@ -use crate::fn_builder; +use crate::{fn_builder, SmartDefault}; -#[derive(Default)] +#[derive(SmartDefault)] pub struct OptionId(Option); impl OptionId { diff --git a/pagetop/src/html/opt_name.rs b/pagetop/src/html/opt_name.rs index d253e7e3..84c665a8 100644 --- a/pagetop/src/html/opt_name.rs +++ b/pagetop/src/html/opt_name.rs @@ -1,6 +1,6 @@ -use crate::fn_builder; +use crate::{fn_builder, SmartDefault}; -#[derive(Default)] +#[derive(SmartDefault)] pub struct OptionName(Option); impl OptionName { diff --git a/pagetop/src/html/opt_string.rs b/pagetop/src/html/opt_string.rs index d81abdb0..c1f55ebd 100644 --- a/pagetop/src/html/opt_string.rs +++ b/pagetop/src/html/opt_string.rs @@ -1,6 +1,6 @@ -use crate::fn_builder; +use crate::{fn_builder, SmartDefault}; -#[derive(Default)] +#[derive(SmartDefault)] pub struct OptionString(Option); impl OptionString { diff --git a/pagetop/src/html/opt_translated.rs b/pagetop/src/html/opt_translated.rs index 722db440..400170fc 100644 --- a/pagetop/src/html/opt_translated.rs +++ b/pagetop/src/html/opt_translated.rs @@ -1,9 +1,8 @@ -use crate::fn_builder; use crate::html::Markup; use crate::locale::{L10n, LanguageIdentifier}; +use crate::{fn_builder, SmartDefault}; -#[derive(Default)] - +#[derive(SmartDefault)] pub struct OptionTranslated(L10n); impl OptionTranslated { diff --git a/pagetop/src/html/unit.rs b/pagetop/src/html/unit.rs index 44371fa3..1c3bdffe 100644 --- a/pagetop/src/html/unit.rs +++ b/pagetop/src/html/unit.rs @@ -1,4 +1,4 @@ -use crate::concat_string; +use crate::{concat_string, SmartDefault}; // About pixels: Pixels (px) are relative to the viewing device. For low-dpi devices, 1px is one // device pixel (dot) of the display. For printers and high resolution screens 1px implies multiple @@ -10,7 +10,7 @@ use crate::concat_string; // About viewport: If the browser window size is 50cm wide, 1vw = 0.5cm. #[rustfmt::skip] -#[derive(Default)] +#[derive(SmartDefault)] pub enum Value { #[default] None, diff --git a/pagetop/src/lib.rs b/pagetop/src/lib.rs index 43772bbe..0192aa7c 100644 --- a/pagetop/src/lib.rs +++ b/pagetop/src/lib.rs @@ -101,7 +101,7 @@ #![cfg_attr(docsrs, feature(doc_cfg))] // ************************************************************************************************* -// RE-EXPORTED MACROS. +// RE-EXPORTED MACROS AND DERIVES. // ************************************************************************************************* pub use concat_string::concat_string; @@ -109,6 +109,10 @@ pub use concat_string::concat_string; /// Enables flexible identifier concatenation in macros, allowing new items with pasted identifiers. pub use paste::paste; +/// Custom derive for automatically implementing the [Default](std::default::Default) trait with +/// customized default values. +pub use smart_default::SmartDefault; + pub use pagetop_macros::{fn_builder, main, test}; // ************************************************************************************************* diff --git a/pagetop/src/locale.rs b/pagetop/src/locale.rs index de2e1b8d..00833845 100644 --- a/pagetop/src/locale.rs +++ b/pagetop/src/locale.rs @@ -88,7 +88,7 @@ //! ``` use crate::html::{Markup, PreEscaped}; -use crate::{config, kv, LazyStatic, LOCALES_PAGETOP}; +use crate::{config, kv, LazyStatic, SmartDefault, LOCALES_PAGETOP}; pub use fluent_templates; pub use unic_langid::LanguageIdentifier; @@ -169,7 +169,7 @@ macro_rules! static_locales { }; } -#[derive(Default)] +#[derive(SmartDefault)] enum L10nOp { #[default] None, @@ -177,7 +177,7 @@ enum L10nOp { Translate(String), } -#[derive(Default)] +#[derive(SmartDefault)] pub struct L10n { op: L10nOp, locales: Option<&'static Locales>, diff --git a/pagetop/src/prelude.rs b/pagetop/src/prelude.rs index 1ac38762..7f517184 100644 --- a/pagetop/src/prelude.rs +++ b/pagetop/src/prelude.rs @@ -1,7 +1,7 @@ //! The PageTop Prelude. -// Re-exported macros. -pub use crate::{concat_string, fn_builder, main, paste, test}; +// Re-exported macros and derives. +pub use crate::{concat_string, fn_builder, main, paste, test, SmartDefault}; // Global. pub use crate::{Handle, HasHandle, HashMapResources, LazyStatic, Weight};