this repo has no description
1use crate::validation::{RecordValidator, ValidationError}; 2use axum::{ 3 Json, 4 http::StatusCode, 5 response::{IntoResponse, Response}, 6}; 7use serde_json::json; 8 9pub fn validate_record(record: &serde_json::Value, collection: &str) -> Result<(), Box<Response>> { 10 let validator = RecordValidator::new(); 11 match validator.validate(record, collection) { 12 Ok(_) => Ok(()), 13 Err(ValidationError::MissingType) => Err(Box::new(( 14 StatusCode::BAD_REQUEST, 15 Json(json!({"error": "InvalidRecord", "message": "Record must have a $type field"})), 16 ).into_response())), 17 Err(ValidationError::TypeMismatch { expected, actual }) => Err(Box::new(( 18 StatusCode::BAD_REQUEST, 19 Json(json!({"error": "InvalidRecord", "message": format!("Record $type '{}' does not match collection '{}'", actual, expected)})), 20 ).into_response())), 21 Err(ValidationError::MissingField(field)) => Err(Box::new(( 22 StatusCode::BAD_REQUEST, 23 Json(json!({"error": "InvalidRecord", "message": format!("Missing required field: {}", field)})), 24 ).into_response())), 25 Err(ValidationError::InvalidField { path, message }) => Err(Box::new(( 26 StatusCode::BAD_REQUEST, 27 Json(json!({"error": "InvalidRecord", "message": format!("Invalid field '{}': {}", path, message)})), 28 ).into_response())), 29 Err(ValidationError::InvalidDatetime { path }) => Err(Box::new(( 30 StatusCode::BAD_REQUEST, 31 Json(json!({"error": "InvalidRecord", "message": format!("Invalid datetime format at '{}'", path)})), 32 ).into_response())), 33 Err(e) => Err(Box::new(( 34 StatusCode::BAD_REQUEST, 35 Json(json!({"error": "InvalidRecord", "message": e.to_string()})), 36 ).into_response())), 37 } 38}