kit_rs/
lib.rs

1pub mod auth;
2pub mod cache;
3pub mod config;
4pub mod container;
5pub mod csrf;
6pub mod database;
7pub mod error;
8pub mod hashing;
9pub mod http;
10pub mod inertia;
11pub mod middleware;
12pub mod routing;
13pub mod schedule;
14pub mod server;
15pub mod session;
16pub mod testing;
17
18pub use auth::{Auth, Authenticatable, AuthMiddleware, GuestMiddleware, UserProvider};
19pub use cache::{Cache, CacheConfig, CacheStore, InMemoryCache, RedisCache};
20pub use config::{env, env_optional, env_required, AppConfig, Config, Environment, ServerConfig};
21pub use container::{App, Container};
22pub use csrf::{csrf_field, csrf_meta_tag, csrf_token, CsrfMiddleware};
23pub use database::{
24    AutoRouteBinding, Database, DatabaseConfig, DatabaseType, DbConnection, Model, ModelMut,
25    RouteBinding, DB,
26};
27pub use error::{AppError, FrameworkError, HttpError, ValidationErrors};
28pub use hashing::{hash, needs_rehash, verify, DEFAULT_COST as HASH_DEFAULT_COST};
29pub use http::{
30    json, text, Cookie, CookieOptions, FormRequest, FromParam, FromRequest, HttpResponse, Redirect,
31    Request, Response, ResponseExt, SameSite,
32};
33pub use session::{
34    session, session_mut, SessionConfig, SessionData, SessionMiddleware, SessionStore,
35};
36pub use inertia::{InertiaConfig, InertiaContext, InertiaResponse};
37pub use middleware::{
38    register_global_middleware, Middleware, MiddlewareFuture, MiddlewareRegistry, Next,
39};
40pub use routing::{
41    route, validate_route_path,
42    // Internal functions used by macros (hidden from docs)
43    __delete_impl, __fallback_impl, __get_impl, __post_impl, __put_impl,
44    FallbackDefBuilder, GroupBuilder, GroupDef, GroupItem, GroupRoute, GroupRouter,
45    IntoGroupItem, RouteBuilder, RouteDefBuilder, Router,
46};
47pub use schedule::{CronExpression, DayOfWeek, Schedule, Task, TaskBuilder, TaskEntry, TaskResult};
48pub use server::Server;
49
50// Re-export async_trait for middleware implementations
51pub use async_trait::async_trait;
52
53// Re-export inventory for #[service(ConcreteType)] macro
54#[doc(hidden)]
55pub use inventory;
56
57// Re-export for macro usage
58#[doc(hidden)]
59pub use serde_json;
60
61// Re-export serde for InertiaProps derive macro
62pub use serde;
63
64// Re-export validator for FormRequest validation
65pub use validator;
66pub use validator::Validate;
67
68// Re-export the proc-macros for compile-time component validation and type safety
69pub use kit_macros::domain_error;
70pub use kit_macros::handler;
71pub use kit_macros::inertia_response;
72pub use kit_macros::injectable;
73pub use kit_macros::redirect;
74pub use kit_macros::request;
75pub use kit_macros::service;
76pub use kit_macros::FormRequest as FormRequestDerive;
77pub use kit_macros::InertiaProps;
78pub use kit_macros::kit_test;
79
80// Re-export Jest-like testing macros
81pub use kit_macros::describe;
82pub use kit_macros::test;
83
84#[macro_export]
85macro_rules! json_response {
86    ($($json:tt)+) => {
87        Ok($crate::HttpResponse::json($crate::serde_json::json!($($json)+)))
88    };
89}
90
91#[macro_export]
92macro_rules! text_response {
93    ($text:expr) => {
94        Ok($crate::HttpResponse::text($text))
95    };
96}
97
98/// Register global middleware that runs on every request
99///
100/// Global middleware is registered in `bootstrap.rs` and runs in registration order,
101/// before any route-specific middleware.
102///
103/// # Example
104///
105/// ```rust,ignore
106/// // In bootstrap.rs
107/// use kit::global_middleware;
108/// use crate::middleware;
109///
110/// pub fn register() {
111///     global_middleware!(middleware::LoggingMiddleware);
112///     global_middleware!(middleware::CorsMiddleware);
113/// }
114/// ```
115#[macro_export]
116macro_rules! global_middleware {
117    ($middleware:expr) => {
118        $crate::register_global_middleware($middleware)
119    };
120}
121
122/// Create an expectation for fluent assertions
123///
124/// # Example
125///
126/// ```rust,ignore
127/// use kit::expect;
128///
129/// expect!(actual).to_equal(expected);
130/// expect!(result).to_be_ok();
131/// expect!(vec).to_have_length(3);
132/// ```
133///
134/// On failure, shows clear output:
135/// ```text
136/// Test: "returns all todos"
137///   at src/actions/todo_action.rs:25
138///
139///   expect!(actual).to_equal(expected)
140///
141///   Expected: 0
142///   Received: 3
143/// ```
144#[macro_export]
145macro_rules! expect {
146    ($value:expr) => {
147        $crate::testing::Expect::new($value, concat!(file!(), ":", line!()))
148    };
149}