web/pages/account/create/
validate.rs1use 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}