Lines
0 %
Functions
Branches
100 %
use axum::Json;
use axum::response::IntoResponse;
use serde::Deserialize;
use crate::pages::HtmlTemplate;
use crate::pages::validation::feedback::ValidationFeedback;
#[derive(Deserialize)]
pub struct FractionValidation {
fraction: Option<String>, // Change to string to handle all input types
}
pub async fn validate_fraction(Json(form): Json<FractionValidation>) -> impl IntoResponse {
let fraction_str = match &form.fraction {
Some(s) if !s.trim().is_empty() => s,
_ => return HtmlTemplate(ValidationFeedback::error(t!("Fraction is required"))),
};
let fraction = match fraction_str.parse::<i64>() {
Ok(num) => num,
Err(_) => {
return HtmlTemplate(ValidationFeedback::error(t!("Please enter a valid number")));
if fraction <= 0 {
return HtmlTemplate(ValidationFeedback::error(
"Fraction must be greater than zero",
));
if fraction > 1_000_000_000 {
return HtmlTemplate(ValidationFeedback::error(t!("Fraction value is too large")));
HtmlTemplate(ValidationFeedback::success(t!("Ok")))
pub struct SymbolValidation {
symbol: Option<String>,
pub async fn validate_symbol(Json(form): Json<SymbolValidation>) -> impl IntoResponse {
let symbol = match form.symbol {
Some(s) => s,
None => return HtmlTemplate(ValidationFeedback::error(t!("Symbol is required"))),
if symbol.is_empty() {
return HtmlTemplate(ValidationFeedback::error(t!("Symbol cannot be empty")));
if symbol.len() > 20 {
"Symbol cannot exceed 20 characters",
pub struct FullnameValidation {
name: Option<String>,
pub async fn validate_name(Json(form): Json<FullnameValidation>) -> impl IntoResponse {
let name = match form.name {
Some(n) => n,
None => return HtmlTemplate(ValidationFeedback::notice(t!("Full name is recommended"))),
if name.is_empty() {
return HtmlTemplate(ValidationFeedback::notice(t!("Full name is recommended")));
if name.len() < 2 {
return HtmlTemplate(ValidationFeedback::error(t!("Full name is too short")));
if name.len() > 100 {
return HtmlTemplate(ValidationFeedback::error(t!("Full name is too long")));