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 validate_record_with_rkey(record, collection, None) 11} 12 13pub fn validate_record_with_rkey( 14 record: &serde_json::Value, 15 collection: &str, 16 rkey: Option<&str>, 17) -> Result<(), Box<Response>> { 18 let validator = RecordValidator::new(); 19 match validator.validate_with_rkey(record, collection, rkey) { 20 Ok(_) => Ok(()), 21 Err(ValidationError::MissingType) => Err(Box::new(( 22 StatusCode::BAD_REQUEST, 23 Json(json!({"error": "InvalidRecord", "message": "Record must have a $type field"})), 24 ).into_response())), 25 Err(ValidationError::TypeMismatch { expected, actual }) => Err(Box::new(( 26 StatusCode::BAD_REQUEST, 27 Json(json!({"error": "InvalidRecord", "message": format!("Record $type '{}' does not match collection '{}'", actual, expected)})), 28 ).into_response())), 29 Err(ValidationError::MissingField(field)) => Err(Box::new(( 30 StatusCode::BAD_REQUEST, 31 Json(json!({"error": "InvalidRecord", "message": format!("Missing required field: {}", field)})), 32 ).into_response())), 33 Err(ValidationError::InvalidField { path, message }) => Err(Box::new(( 34 StatusCode::BAD_REQUEST, 35 Json(json!({"error": "InvalidRecord", "message": format!("Invalid field '{}': {}", path, message)})), 36 ).into_response())), 37 Err(ValidationError::InvalidDatetime { path }) => Err(Box::new(( 38 StatusCode::BAD_REQUEST, 39 Json(json!({"error": "InvalidRecord", "message": format!("Invalid datetime format at '{}'", path)})), 40 ).into_response())), 41 Err(ValidationError::BannedContent { path }) => Err(Box::new(( 42 StatusCode::BAD_REQUEST, 43 Json(json!({"error": "InvalidRecord", "message": format!("Unacceptable slur in record at '{}'", path)})), 44 ).into_response())), 45 Err(e) => Err(Box::new(( 46 StatusCode::BAD_REQUEST, 47 Json(json!({"error": "InvalidRecord", "message": e.to_string()})), 48 ).into_response())), 49 } 50}