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