kit_rs/
lib.rs

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