chuanyue-service/library/src/res/validator.rs
2024-06-21 10:00:07 +08:00

43 lines
1.8 KiB
Rust

use i18n::message;
use validator::Validate;
use super::response::{ResData, ResErr, ResResult};
pub fn validate_params(params: &impl Validate, local: &str) -> ResResult<ResData<()>> {
let validate_err = params.validate();
match validate_err {
Ok(_) => Result::Ok(ResData::none()),
Err(err) => {
let mut errors = vec![];
for (_, err) in err.errors().iter() {
match err {
validator::ValidationErrorsKind::Struct(err) => {
err.field_errors().iter().for_each(|(_field, errs)| {
errs.iter().for_each(|e| {
let msg = e.message.clone().unwrap_or_default();
errors.push(message!(local, msg.trim()))
});
});
},
validator::ValidationErrorsKind::List(err) => {
for (_, err) in err.iter() {
err.field_errors().iter().for_each(|(_field, errs)| {
errs.iter().for_each(|e| {
let msg = e.message.clone().unwrap_or_default();
errors.push(message!(local, msg.trim()))
});
});
}
},
validator::ValidationErrorsKind::Field(err) => {
err.iter().for_each(|e| {
let msg = e.message.clone().unwrap_or_default();
errors.push(message!(local, msg.trim()))
});
},
};
}
Err(ResErr::params(errors.join(";")))
},
}
}