Lines
44.12 %
Functions
5.56 %
Branches
100 %
use askama::Template;
use std::fmt;
pub enum ValidationStatus {
Error(String),
Success(String),
Notice(String),
None,
}
impl fmt::Display for ValidationStatus {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
ValidationStatus::Error(msg) => write!(f, "{msg}"),
ValidationStatus::Success(msg) => write!(f, "{msg}"),
ValidationStatus::Notice(msg) => write!(f, "{msg}"),
ValidationStatus::None => write!(f, ""),
#[derive(Template)]
#[template(path = "components/validation/feedback.html")]
pub struct ValidationFeedback {
status: ValidationStatus,
impl ValidationFeedback {
pub fn error(message: impl Into<String>) -> Self {
Self {
status: ValidationStatus::Error(message.into()),
pub fn success(message: impl Into<String>) -> Self {
status: ValidationStatus::Success(message.into()),
pub fn notice(message: impl Into<String>) -> Self {
status: ValidationStatus::Notice(message.into()),
// Helper methods for template
pub const fn is_error(&self) -> bool {
matches!(self.status, ValidationStatus::Error(_))
pub const fn is_success(&self) -> bool {
matches!(self.status, ValidationStatus::Success(_))
pub const fn is_notice(&self) -> bool {
matches!(self.status, ValidationStatus::Notice(_))
pub const fn has_message(&self) -> bool {
!matches!(self.status, ValidationStatus::None)