anycms_core/lib.rs
1//! anycms-core
2//!
3//! A unified API response library supporting multiple Rust web frameworks.
4//!
5//! ## Features
6//! - `actix` (default): Support for actix-web framework
7//! - `axum`: Support for axum framework
8//! - `full`: Enable all framework integrations
9//!
10//! ## Basic Usage
11//! ```rust
12//! use anycms_core::ApiResult;
13//! use serde::Serialize;
14//!
15//! #[derive(Serialize)]
16//! struct User {
17//! id: u32,
18//! name: String,
19//! }
20//!
21//! fn handle_request() -> ApiResult<User> {
22//! let user = User { id: 1, name: "Alice".to_string() };
23//! ApiResult::value(user)
24//! }
25//! ```
26//!
27//! ## Error Handling
28//! ```rust
29//! use anycms_core::{ApiResult, ApiError};
30//!
31//! fn handle_error() -> ApiResult<String> {
32//! ApiError::not_found("Resource not found").into()
33//! }
34//! ```
35//!
36//! ## Validation Errors
37//! ```rust
38//! use anycms_core::{ApiResult, FieldError};
39//!
40//! fn validate() -> ApiResult<String> {
41//! ApiResult::validation_errors(vec![
42//! FieldError::new("email", "invalid format"),
43//! ])
44//! }
45//! ```
46//!
47//! ## Request Tracing
48//! ```rust
49//! use anycms_core::ApiResult;
50//!
51//! fn handler() -> ApiResult<String> {
52//! ApiResult::ok().with_trace_id("req-abc123")
53//! }
54//! ```
55
56mod pagination;
57mod result;
58
59// Framework-specific implementations
60mod frameworks;
61
62// Core exports (always available)
63pub use pagination::ResultPagination;
64pub use result::{
65 ApiResult, DefaultResult, AnyhowResult, EmptyResult,
66 ErrorCode, ApiError, AppError, IntoApiResult,
67 ResponseData, FieldError,
68};
69
70// Framework-specific exports (available only when corresponding feature is enabled)
71#[cfg(feature = "actix")]
72pub use frameworks::actix;
73
74#[cfg(feature = "axum")]
75pub use frameworks::axum;