//! Shared configuration constants and limits for StemeDB. //! //! This module centralizes validation limits and default values used across //! the codebase to prevent duplication and ensure consistency. /// Maximum allowed subject (entity ID) length in bytes. /// /// Subjects should be concise identifiers, not full-text descriptions. /// This limit prevents unbounded memory growth and ensures reasonable /// index performance. /// /// # Example /// - Valid: `"Tesla_Inc"` (9 bytes) /// - Valid: `"COMPOUND_CID_12345"` (18 bytes) /// - Invalid: A 2KB entity description embedded in the subject field pub const MAX_SUBJECT_LEN: usize = 1024; /// Maximum allowed predicate (relation ID) length in bytes. /// /// Predicates should be short relation names, not sentences. /// This limit ensures efficient indexing on the predicate dimension. /// /// # Example /// - Valid: `"has_revenue"` (11 bytes) /// - Valid: `"treats_condition"` (16 bytes) /// - Invalid: A 512-byte natural language description of the relationship pub const MAX_PREDICATE_LEN: usize = 256; /// Maximum allowed object (value) length in bytes. /// /// Objects can contain numbers, strings, or structured data (JSON). /// This limit prevents unbounded memory growth while allowing reasonable /// values like long text descriptions or JSON payloads. /// /// # Example /// - Valid: `"96.7"` (4 bytes) /// - Valid: `"oblate_spheroid"` (16 bytes) /// - Valid: JSON with nested structure (up to 4096 bytes) /// - Invalid: A 10KB embedded document in the object field pub const MAX_OBJECT_LEN: usize = 4096; /// Maximum source document size in bytes (10 MB). /// /// Source documents are stored as opaque byte blobs indexed by content hash. /// This limit prevents storage exhaustion from maliciously large uploads /// while supporting typical PDFs, images, and text documents. /// /// # Rationale /// - Average research paper PDF: 1-3 MB /// - High-resolution screenshot: 2-5 MB /// - 10 MB allows reasonable documents while preventing abuse /// /// # Note /// For larger source materials, consider storing a pointer (URL, IPFS CID) /// in the source metadata instead of the raw bytes. pub const MAX_SOURCE_SIZE: usize = 10 * 1024 * 1024; /// Default limit for paginated query results. /// /// Applied when no explicit limit is provided in the query parameters. /// Prevents accidentally fetching unbounded result sets. /// /// # Example /// ```ignore /// GET /v1/query?subject=Tesla_Inc&limit=50 // explicit limit /// GET /v1/query?subject=Tesla_Inc // uses DEFAULT_QUERY_LIMIT /// ``` pub const DEFAULT_QUERY_LIMIT: usize = 100;