anycms-core
支持多种 Rust Web 框架的统一 API 响应库。
特性
- 框架无关的核心:
ApiResult<T>结构独立于任何 Web 框架工作 - 多框架支持:内置 actix-web 和 axum 集成
- Feature flags:按需使用 - 零未使用的依赖
- 灵活的响应格式:支持单值、列表、分页、错误码和额外元数据
- 字段级验证错误:
FieldError支持表单验证场景 - 请求追踪:内置
traceId字段,方便生产环境排查
安装
在 Cargo.toml 中添加:
[]
= "0.4"
Feature Flags
actix(默认):启用 actix-web 集成axum:启用 axum 集成full:启用所有框架集成
示例
# 默认(仅 actix-web)
= "0.4"
# 仅 axum
= { = "0.4", = ["axum"] }
# 两个框架都启用
= { = "0.4", = ["full"] }
项目结构
src/
├── lib.rs # 库入口,带 feature 条件导出
├── result.rs # 核心 ApiResult<T>、错误类型、FieldError
├── pagination.rs # 分页元数据结构
└── frameworks/
├── mod.rs # 框架模块声明
├── actix.rs # actix-web 集成 (Responder trait)
└── axum.rs # axum 集成 (IntoResponse trait)
架构设计
该库采用清晰的关注点分离设计:
-
核心层 (result.rs, pagination.rs)
- 包含数据结构和构建器方法
- 零框架依赖
- 无论启用哪个 feature 都会编译
-
框架层 (frameworks/)
- 实现框架特定的 trait
- 基于 feature flags 条件编译
- 相互隔离,避免冲突
使用方法
成功响应
use ;
// 单值
let result = value;
// 列表 + 分页
let result = list
.with_pagination
.with_extra;
// 空响应
let result = ok;
错误响应
use ;
// 使用 ApiError
let result: = not_found.into;
// 使用快捷方法
let result = fail.with_code;
验证错误
use ;
// 一次性传入所有字段错误
let result: = validation_errors;
// 或链式添加
let result = fail
.with_code
.with_error
.with_error;
请求追踪
use ApiResult;
let result = fail
.with_code
.with_trace_id;
分页辅助方法
use ResultPagination;
let pagination = new;
pagination.total_pages; // 10
pagination.has_next; // true
pagination.has_prev; // true
框架集成
Actix-web
use get;
use ApiResult;
async
Axum
use Path;
use ApiResult;
async
API 响应格式
成功响应(单值)
成功响应(列表)
空成功响应
错误响应
验证错误响应
带追踪的错误响应
示例
运行演示示例:
# Actix-web 演示
# Axum 演示
# 检查示例
许可证
MIT