`Route` resuelve URLs sensibles al `Context`/idioma en propiedades de componentes; `RoutePath` (renombrado desde html/route.rs) es el valor concreto de ruta + query. `Waypoint` transporta la URL de retorno entre pantallas de listado/alta/edición vía query string. Ajusta `Context::route()`, `Redirect` y los componentes que aceptan rutas para integrarse con el nuevo tipo `Route`.
62 lines
2.1 KiB
Rust
62 lines
2.1 KiB
Rust
use crate::html::{Markup, html};
|
|
use crate::{AutoDefault, Getters};
|
|
|
|
use thiserror::Error;
|
|
|
|
/// Error producido durante el renderizado de un componente.
|
|
///
|
|
/// Se usa en [`Component::prepare()`](super::Component::prepare) para devolver
|
|
/// un [`Err`]. Puede incluir un marcado HTML alternativo para renderizar el componente de manera
|
|
/// diferente en caso de error.
|
|
///
|
|
/// # Ejemplo
|
|
///
|
|
/// ```rust,no_run
|
|
/// # use pagetop::prelude::*;
|
|
/// # #[derive(Clone)]
|
|
/// # struct MyComponent;
|
|
/// # #[async_trait]
|
|
/// # impl Component for MyComponent {
|
|
/// # fn new() -> Self { MyComponent }
|
|
/// async fn prepare(&self, _cx: &mut Context) -> Result<Markup, ComponentError> {
|
|
/// Err(ComponentError::new("Database connection failed")
|
|
/// .with_fallback(html! { p class="error" { "Content temporarily unavailable." } }))
|
|
/// }
|
|
/// # }
|
|
/// ```
|
|
#[derive(AutoDefault, Debug, Error, Getters)]
|
|
#[error("{message}")]
|
|
pub struct ComponentError {
|
|
/// Mensaje descriptivo del error.
|
|
message: String,
|
|
/// Marcado HTML alternativo para mostrar si el componente falla.
|
|
fallback: Markup,
|
|
}
|
|
|
|
impl ComponentError {
|
|
/// Crea un nuevo error para un componente con un marcado alternativo vacío.
|
|
pub fn new(message: impl Into<String>) -> Self {
|
|
ComponentError {
|
|
message: message.into(),
|
|
fallback: html! {},
|
|
}
|
|
}
|
|
|
|
// **< ComponentError BUILDER >*****************************************************************
|
|
|
|
/// Asigna el marcado HTML alternativo (*fallback*) que se mostrará si el componente falla.
|
|
///
|
|
/// Si no se proporciona, no se renderizará nada del componente.
|
|
pub fn with_fallback(mut self, fallback: Markup) -> Self {
|
|
self.fallback = fallback;
|
|
self
|
|
}
|
|
|
|
// **< ComponentError GETTERS >*****************************************************************
|
|
|
|
// Consume el error y devuelve su marcado alternativo. Se invoca internamente desde
|
|
// `ComponentRender::render()`, en el mismo módulo `core::component`.
|
|
pub(super) fn into_fallback(self) -> Markup {
|
|
self.fallback
|
|
}
|
|
}
|