this/
lib.rs

1//! # This-RS Framework
2//!
3//! A generic entity and relationship management framework for building RESTful APIs in Rust.
4//!
5//! ## Features
6//!
7//! - **Generic Entity System**: Define entities without modifying core framework code
8//! - **Flexible Relationships**: Support multiple link types between same entities
9//! - **Bidirectional Navigation**: Query relationships from both directions
10//! - **Auto-Pluralization**: Intelligent plural forms (company → companies)
11//! - **Configuration-Based**: Define relationships via YAML configuration
12//! - **Multi-tenant Support**: Built-in tenant isolation
13//! - **Type-Safe**: Leverage Rust's type system for compile-time guarantees
14//!
15//! ## Quick Start
16//!
17//! ```rust,ignore
18//! use this::prelude::*;
19//!
20//! #[derive(Debug, Clone, Serialize, Deserialize)]
21//! struct User {
22//!     id: Uuid,
23//!     tenant_id: Uuid,
24//!     name: String,
25//!     email: String,
26//! }
27//!
28//! impl_data_entity!(User, "user", ["name", "email"]);
29//! ```
30
31pub mod config;
32pub mod core;
33pub mod entities;
34pub mod links;
35pub mod server;
36
37/// Re-exports of commonly used types and traits
38pub mod prelude {
39    pub use crate::core::{
40        auth::{AuthContext, AuthPolicy, AuthProvider, NoAuthProvider},
41        entity::{Data, Entity},
42        extractors::{extract_tenant_id, DirectLinkExtractor, ExtractorError, LinkExtractor},
43        field::{FieldFormat, FieldValue},
44        link::{EntityReference, Link, LinkAuthConfig, LinkDefinition},
45        module::{EntityFetcher, Module},
46        pluralize::Pluralizer,
47        service::{DataService, LinkService},
48    };
49
50    pub use crate::links::{
51        handlers::{
52            create_link, delete_link, get_link, list_available_links, list_links, update_link,
53            AppState,
54        },
55        registry::{LinkDirection, LinkRouteRegistry, RouteInfo},
56        service::InMemoryLinkService,
57    };
58
59    pub use crate::config::{EntityAuthConfig, EntityConfig, LinksConfig, ValidationRule};
60
61    pub use crate::server::{EntityDescriptor, EntityRegistry, ServerBuilder};
62
63    // Re-export common external dependencies
64    pub use anyhow::Result;
65    pub use async_trait::async_trait;
66    pub use chrono::{DateTime, Utc};
67    pub use serde::{Deserialize, Serialize};
68    pub use uuid::Uuid;
69
70    // Re-export Axum types for convenience
71    pub use axum::{
72        extract::{Path, State},
73        http::HeaderMap,
74        routing::{delete, get, post},
75        Router,
76    };
77}
78
79// Re-export macros at crate root for easier access