Expand description
ForgeDB Validation
Schema and data validation for ForgeDB with support for constraints, HTTP validation, and error reporting.
§Overview
This crate provides comprehensive validation capabilities for ForgeDB, including:
- Schema validation - Validate schema definitions for correctness
- Constraint validation - Enforce field constraints (@unique, @email, @min, etc.)
- HTTP validation - Validate HTTP endpoint definitions and status codes
- Error reporting - Detailed validation errors with position information
§Architecture
The validation system is organized into several modules:
- Core validation - Basic validation types and error reporting
- HTTP validation - Validates HTTP-specific constructs (endpoints, status codes)
- Status code mapping - Maps database operations to appropriate HTTP status codes
§Validation Pipeline
- Schema Parsing - Parse schema into AST (handled by forgedb-parser)
- Schema Validation - Validate schema structure and semantics
- Constraint Validation - Check constraint parameters and applicability
- HTTP Validation - Validate HTTP endpoints and status codes (if applicable)
§Examples
§Schema Validation
use forgedb_validation::{ValidationError, Position};
// Create a validation error with position
let error = ValidationError::new("Field 'email' must have @email constraint")
.with_position(Position::new(5, 12))
.with_suggestion("Add @email constraint: email: string @email");
println!("Error at {}:{}: {}",
error.position.unwrap().line,
error.position.unwrap().column,
error.message
);§HTTP Validation
use forgedb_validation::HttpValidator;
// HttpValidator is a unit struct — call methods directly (no constructor)
let result = HttpValidator::validate_email("user@example.com");
assert!(result.is_ok());
let result = HttpValidator::validate_length("name", "hi", 1, 10);
assert!(result.is_ok());§Status Code Mapping
use forgedb_validation::StatusCodeMapper;
// StatusCodeMapper is a unit struct — call methods as associated functions
let code = StatusCodeMapper::for_validation_error("not_found");
assert_eq!(code, 404);
assert!(StatusCodeMapper::is_success(200));
assert!(StatusCodeMapper::is_client_error(404));
assert!(StatusCodeMapper::is_server_error(500));§Public API
§Core Types
ValidationError- Validation error with position and suggestionPosition- Line and column position in source codeHttpValidator- HTTP-specific validationStatusCodeMapper- Maps operations to HTTP status codes
§Key Methods
ValidationError::new()- Create a validation errorValidationError::with_position()- Add position informationValidationError::with_suggestion()- Add a suggestion for fixing the errorHttpValidator::validate_endpoint_path()- Validate HTTP endpoint pathStatusCodeMapper::get_status_code()- Get appropriate status code
§Validation Rules
§Schema Validation
- Unique names: Model and struct names must be unique
- Field types: Field types must be valid ForgeDB types
- Primary keys: Each model must have exactly one primary key
- Relations: Relation targets must reference existing models
§Constraint Validation
- @unique: Can be applied to any field type
- @email: Only for string fields
- @min/@max: Only for numeric fields
- @length: Only for string fields
- @pattern: Only for string fields (regex validation)
§HTTP Validation
- Endpoint paths: Must start with ‘/’, valid parameter syntax
- Status codes: Must be valid HTTP status codes (200-599)
- HTTP methods: Must be valid (GET, POST, PUT, DELETE, PATCH)
§Error Reporting
Validation errors include:
- Message: Clear description of the error
- Position: Line and column where error occurred
- Suggestion: Helpful suggestion for fixing the error
Example error output:
Error at line 5, column 12: Field 'email' must have @email constraint
Suggestion: Add @email constraint: email: string @email§Related Crates
forgedb-parser- Parses schemas before validation
§See Also
- SPRINT2_VALIDATION.md - Schema validation
- SPRINT9_SUMMARY.md - HTTP validation
Re-exports§
pub use http::HttpValidationError;pub use http::HttpValidator;pub use status::StatusCodeMapper;
Modules§
- http
- HTTP-specific validation extensions for Sprint 9
- status
- HTTP status code mapping for validation errors
Structs§
- Position
- Represents a position in the source code
- Validation
Error - Validation error with position information
Functions§
- check_
duplicate_ fields - Check for duplicate field names in a collection
- check_
duplicate_ models - Check for duplicate model names in a collection
- is_
pascal_ case - Check if a string is in PascalCase format
- is_
snake_ case - Check if a string is in snake_case format
- to_
pascal_ case - Convert a string to PascalCase (for suggestions)
- to_
snake_ case - Convert a string to snake_case (for suggestions)
- validate_
field_ name - Validate field name follows snake_case convention
- validate_
model_ name - Validate model name follows PascalCase convention