CLAUDE.md#
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Overview#
This is slices-lexicon, a high-performance Rust library for AT Protocol lexicon validation. It validates AT Protocol lexicon documents and data records, with optional WebAssembly compilation for JavaScript/TypeScript environments.
Important: For the complete AT Protocol lexicon specification, refer to ../../context/lexicons_spec.md.
Development Commands#
Rust Library#
cargo build- Build the librarycargo test- Run testscargo check- Analyze code without buildingcargo doc- Build documentation
WebAssembly Build#
wasm-pack build --target web --features wasm- Build WASM module for web usage- The WASM build outputs to
pkg/directory with JavaScript bindings
Testing#
- Run specific tests:
cargo test test_name - Run tests with output:
cargo test -- --nocapture
Architecture#
This crate implements a modular, trait-based validation system for AT Protocol lexicons:
Core Components#
-
Validation Context (
src/validation/context.rs)- Central state holder during validation
- Manages loaded lexicon documents and reference resolution
- Handles circular reference detection
- Tracks validation paths for error reporting
-
Validator Trait (
src/validation/traits.rs)- Common interface for all validators
- Enables type-safe validation logic and easy testing
-
Validation Categories
- Primary types (
src/validation/primary/):record,query,procedure,subscription - Field types (
src/validation/field/):object,array,union,ref - Primitive types (
src/validation/primitive/):string,integer,boolean,bytes,blob,cid-link,null - Meta types (
src/validation/meta/):token,unknown
- Primary types (
Key Design Patterns#
- Builder Pattern:
ValidationContextBuilderfor configuring validation contexts - Reference Resolution: Supports both local (
#def) and global (lexicon#def) references - Error Context: Detailed path tracking for pinpointing validation failures
- WASM Bindings: Optional WebAssembly exports when
wasmfeature is enabled
Entry Points#
validate(lexicons)- Primary API for validating lexicon documentsvalidate_record(lexicons, collection, record)- Validate data against a lexicon schemais_valid_nsid(nsid)- Utility for NSID format validation
WebAssembly Integration#
When compiled with --features wasm, the library exports:
WasmLexiconValidatorclass for reusable validationvalidate_lexicons_and_get_errors()for one-off validation- Individual format validation functions
String Formats Supported#
AT Protocol string formats: datetime, uri, at-uri, did, handle, at-identifier, nsid, cid, language, tid, record-key
Error Handling#
Uses thiserror for structured error types. Validation errors include detailed context about location and cause, making debugging straightforward.
Project Structure#
src/
├── lib.rs # Main library entry point with public APIs
├── types.rs # Core types (LexiconDoc, StringFormat)
├── errors.rs # Error definitions using thiserror
└── validation/
├── mod.rs # Validation module exports
├── context.rs # ValidationContext and builder
├── traits.rs # Validator trait definition
├── constraints.rs # Common validation constraints
├── resolution.rs # Reference resolution utilities
├── primary/ # Primary AT Protocol types
│ ├── mod.rs
│ ├── record.rs # Record type validator
│ ├── query.rs # Query endpoint validator
│ ├── procedure.rs # Procedure endpoint validator
│ └── subscription.rs # Subscription validator
├── field/ # Field/container types
│ ├── mod.rs
│ ├── object.rs # Object validator with properties
│ ├── array.rs # Array validator with constraints
│ ├── union.rs # Union type validator
│ └── reference.rs # Reference validator (resolves $ref)
├── primitive/ # Primitive data types
│ ├── mod.rs
│ ├── string.rs # String validation with format checking
│ ├── integer.rs # Integer with min/max constraints
│ ├── boolean.rs # Boolean validation
│ ├── bytes.rs # Base64 bytes validation
│ ├── blob.rs # Blob (binary data) validation
│ ├── cid_link.rs # CID link validation
│ └── null.rs # Null value validation
└── meta/ # Meta types for schema composition
├── mod.rs
├── token.rs # Token (unit type) validator
└── unknown.rs # Unknown type validator
Key Files#
lib.rs- Contains main APIs, WASM bindings, and comprehensive examplesvalidation/context.rs- Core validation state management and reference resolutionvalidation/primitive/string.rs- Extensive AT Protocol string format validationpkg/- Generated WASM artifacts (created bywasm-pack build)