Skip to main content

web/pages/account/create/
validate.rs

1use axum::Json;
2use axum::response::IntoResponse;
3use serde::Deserialize;
4
5use crate::pages::HtmlTemplate;
6use crate::pages::validation::feedback::ValidationFeedback;
7
8#[derive(Deserialize)]
9pub struct NameValidation {
10    name: Option<String>,
11}
12
13pub async fn validate_name(Json(form): Json<NameValidation>) -> impl IntoResponse {
14    let name = match &form.name {
15        Some(s) if !s.trim().is_empty() => s,
16        _ => return HtmlTemplate(ValidationFeedback::error("Account name is required")),
17    };
18
19    if name.len() < 2 {
20        return HtmlTemplate(ValidationFeedback::error("Account name is too short"));
21    }
22
23    if name.len() > 50 {
24        return HtmlTemplate(ValidationFeedback::error(
25            "Account name is too long (max 50 characters)",
26        ));
27    }
28
29    HtmlTemplate(ValidationFeedback::success("Valid account name"))
30}