From f32f69dde73ed1dd78ce8c0b56ad8ab2b8501358 Mon Sep 17 00:00:00 2001 From: Manuel Cillero Date: Sat, 23 Apr 2022 21:23:00 +0200 Subject: [PATCH] Elimina downcast_rs y codifica componentes con Any --- pagetop/Cargo.toml | 1 - pagetop/src/base/component/block.rs | 4 ++++ pagetop/src/base/component/chunck.rs | 4 ++++ pagetop/src/base/component/container.rs | 4 ++++ pagetop/src/base/component/form/button.rs | 4 ++++ pagetop/src/base/component/form/date.rs | 4 ++++ pagetop/src/base/component/form/form.rs | 4 ++++ pagetop/src/base/component/form/hidden.rs | 4 ++++ pagetop/src/base/component/form/input.rs | 4 ++++ pagetop/src/base/component/grid/column.rs | 4 ++++ pagetop/src/base/component/grid/row.rs | 4 ++++ pagetop/src/base/component/image.rs | 4 ++++ pagetop/src/base/component/menu.rs | 8 ++++++++ pagetop/src/base/theme/bulmix/mod.rs | 4 ++-- pagetop/src/response/page/component.rs | 10 +++++----- pagetop/src/response/page/mod.rs | 2 +- 16 files changed, 60 insertions(+), 9 deletions(-) diff --git a/pagetop/Cargo.toml b/pagetop/Cargo.toml index b058c7b4..bd2ba3a1 100644 --- a/pagetop/Cargo.toml +++ b/pagetop/Cargo.toml @@ -24,7 +24,6 @@ categories = [ [dependencies] concat-string = "1.0.1" doc-comment = "0.3.3" -downcast-rs = "1.2.0" figlet-rs = "0.1.3" futures = "0.3.21" once_cell = "1.10.0" diff --git a/pagetop/src/base/component/block.rs b/pagetop/src/base/component/block.rs index 86370ff4..4c2ab0ab 100644 --- a/pagetop/src/base/component/block.rs +++ b/pagetop/src/base/component/block.rs @@ -45,6 +45,10 @@ impl PageComponent for Block { } } } + + fn as_any(&mut self) -> &mut dyn AnyComponent { + self + } } impl Block { diff --git a/pagetop/src/base/component/chunck.rs b/pagetop/src/base/component/chunck.rs index 6dbc0ff1..fa6da576 100644 --- a/pagetop/src/base/component/chunck.rs +++ b/pagetop/src/base/component/chunck.rs @@ -28,6 +28,10 @@ impl PageComponent for Chunck { fn default_render(&self, _: &mut PageAssets) -> Markup { html! { (*self.html()) } } + + fn as_any(&mut self) -> &mut dyn AnyComponent { + self + } } impl Chunck { diff --git a/pagetop/src/base/component/container.rs b/pagetop/src/base/component/container.rs index fab8225a..de4daedc 100644 --- a/pagetop/src/base/component/container.rs +++ b/pagetop/src/base/component/container.rs @@ -72,6 +72,10 @@ impl PageComponent for Container { } } } + + fn as_any(&mut self) -> &mut dyn AnyComponent { + self + } } impl Container { diff --git a/pagetop/src/base/component/form/button.rs b/pagetop/src/base/component/form/button.rs index 4c75dc62..5a2938a0 100644 --- a/pagetop/src/base/component/form/button.rs +++ b/pagetop/src/base/component/form/button.rs @@ -65,6 +65,10 @@ impl PageComponent for Button { } } } + + fn as_any(&mut self) -> &mut dyn AnyComponent { + self + } } impl Button { diff --git a/pagetop/src/base/component/form/date.rs b/pagetop/src/base/component/form/date.rs index 10e795cb..b7d3924c 100644 --- a/pagetop/src/base/component/form/date.rs +++ b/pagetop/src/base/component/form/date.rs @@ -84,6 +84,10 @@ impl PageComponent for Date { } } } + + fn as_any(&mut self) -> &mut dyn AnyComponent { + self + } } impl Date { diff --git a/pagetop/src/base/component/form/form.rs b/pagetop/src/base/component/form/form.rs index 73581ca2..67b9cd73 100644 --- a/pagetop/src/base/component/form/form.rs +++ b/pagetop/src/base/component/form/form.rs @@ -54,6 +54,10 @@ impl PageComponent for Form { } } } + + fn as_any(&mut self) -> &mut dyn AnyComponent { + self + } } impl Form { diff --git a/pagetop/src/base/component/form/hidden.rs b/pagetop/src/base/component/form/hidden.rs index 736aa4ce..4c303e4d 100644 --- a/pagetop/src/base/component/form/hidden.rs +++ b/pagetop/src/base/component/form/hidden.rs @@ -28,6 +28,10 @@ impl PageComponent for Hidden { input type="hidden" id=[id] name=[self.name()] value=[self.value()]; } } + + fn as_any(&mut self) -> &mut dyn AnyComponent { + self + } } impl Hidden { diff --git a/pagetop/src/base/component/form/input.rs b/pagetop/src/base/component/form/input.rs index 71d801b7..21a34a53 100644 --- a/pagetop/src/base/component/form/input.rs +++ b/pagetop/src/base/component/form/input.rs @@ -112,6 +112,10 @@ impl PageComponent for Input { } } } + + fn as_any(&mut self) -> &mut dyn AnyComponent { + self + } } impl Input { diff --git a/pagetop/src/base/component/grid/column.rs b/pagetop/src/base/component/grid/column.rs index 77512ea2..58d3648f 100644 --- a/pagetop/src/base/component/grid/column.rs +++ b/pagetop/src/base/component/grid/column.rs @@ -40,6 +40,10 @@ impl PageComponent for Column { } } } + + fn as_any(&mut self) -> &mut dyn AnyComponent { + self + } } impl Column { diff --git a/pagetop/src/base/component/grid/row.rs b/pagetop/src/base/component/grid/row.rs index 4574b090..6630901c 100644 --- a/pagetop/src/base/component/grid/row.rs +++ b/pagetop/src/base/component/grid/row.rs @@ -40,6 +40,10 @@ impl PageComponent for Row { } } } + + fn as_any(&mut self) -> &mut dyn AnyComponent { + self + } } impl Row { diff --git a/pagetop/src/base/component/image.rs b/pagetop/src/base/component/image.rs index 62690679..aaa96d86 100644 --- a/pagetop/src/base/component/image.rs +++ b/pagetop/src/base/component/image.rs @@ -37,6 +37,10 @@ impl PageComponent for Image { class=[self.classes()]; } } + + fn as_any(&mut self) -> &mut dyn AnyComponent { + self + } } impl Image { diff --git a/pagetop/src/base/component/menu.rs b/pagetop/src/base/component/menu.rs index 68c5c97e..6e052194 100644 --- a/pagetop/src/base/component/menu.rs +++ b/pagetop/src/base/component/menu.rs @@ -67,6 +67,10 @@ impl PageComponent for MenuItem { MenuItemType::Void => html! {}, } } + + fn as_any(&mut self) -> &mut dyn AnyComponent { + self + } } impl MenuItem { @@ -217,6 +221,10 @@ impl PageComponent for Menu { } } } + + fn as_any(&mut self) -> &mut dyn AnyComponent { + self + } } impl Menu { diff --git a/pagetop/src/base/theme/bulmix/mod.rs b/pagetop/src/base/theme/bulmix/mod.rs index c7aa3cb2..d6fd116b 100644 --- a/pagetop/src/base/theme/bulmix/mod.rs +++ b/pagetop/src/base/theme/bulmix/mod.rs @@ -39,11 +39,11 @@ impl ThemeTrait for BulmixTheme { ) { match component.name() { "GridRow" => { - let row = component.downcast_mut::().unwrap(); + let row = component.as_any().downcast_mut::().unwrap(); row.alter_classes("columns", ClassesOp::SetDefault); }, "GridColumn" => { - let col = component.downcast_mut::().unwrap(); + let col = component.as_any().downcast_mut::().unwrap(); col.alter_classes("column", ClassesOp::SetDefault); }, _ => {}, diff --git a/pagetop/src/response/page/component.rs b/pagetop/src/response/page/component.rs index 05528fc8..d58258a4 100644 --- a/pagetop/src/response/page/component.rs +++ b/pagetop/src/response/page/component.rs @@ -1,11 +1,11 @@ use crate::html::{Markup, html}; use crate::response::page::PageAssets; -use downcast_rs::{Downcast, impl_downcast}; - use std::any::type_name; -pub trait PageComponent: Downcast + Send + Sync { +pub use std::any::Any as AnyComponent; + +pub trait PageComponent: AnyComponent + Send + Sync { fn new() -> Self where Self: Sized; @@ -41,6 +41,6 @@ pub trait PageComponent: Downcast + Send + Sync { fn default_render(&self, assets: &mut PageAssets) -> Markup { html! {} } -} -impl_downcast!(PageComponent); + fn as_any(&mut self) -> &mut dyn AnyComponent; +} diff --git a/pagetop/src/response/page/mod.rs b/pagetop/src/response/page/mod.rs index 527f74f9..e238954b 100644 --- a/pagetop/src/response/page/mod.rs +++ b/pagetop/src/response/page/mod.rs @@ -7,7 +7,7 @@ pub use assets::{ }; mod component; -pub use component::PageComponent; +pub use component::{AnyComponent, PageComponent}; mod container; pub use container::PageContainer;