Skip to main content

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;