【Rust笔记】Rocket实现自定义的Responder

在Java项目中,我们通常会将响应包装一层来实现统一响应格式,在Rocket中,我们也可以通过实现Responder来返回统一的响应。

res.rs

rust 复制代码
use crate::api::err::Error;
use rocket::response::Responder;
use rocket::serde::json::json;
use rocket::serde::{Deserialize, Serialize};
use rocket::Request;

#[derive(Serialize, Deserialize)]
pub struct Res<'a, T> {
    code: i32,
    msg: &'a str,
    data: Option<T>,
}

impl<T> Res<T> {
    pub fn success(data: T) -> Self {
        Res {
            code: 0,
            msg: "",
            data: Some(data),
        }
    }

    pub fn error(msg: &str) -> Self {
        Res {
            code: 1,
            msg,
            data: None,
        }
    }

    pub fn from_error(error: Error) -> Self {
        Res {
            code: error.0,
            msg: error.1,
            data: None,
        }
    }
}

impl<'r, 'o: 'r, T: Serialize> Responder<'r, 'o> for Res<T> {
    fn respond_to(self, request: &'r Request<'_>) -> rocket::response::Result<'o> {
        json!(&self).respond_to(request)
    }
}

err.rs

rust 复制代码
pub type Error<'a> = (i32, &'a str);

pub const ANY: Error = (1, "system error");
pub const SOURCE_NOT_EMPTY: Error = (1001, "source is not empty");

然后就可以按具体处理结果返回统一的失败或者成功响应:

  • 成功:

    rust 复制代码
    Res::success(source)
  • 失败:

    rust 复制代码
    Res::error("失败原因")
  • 自定义失败code:

    rust 复制代码
    Res::from_error((10001,"失败原因"))

    或者在err.rs中添加错误类型后:

    rust 复制代码
    Res::from_error(err::SOURCE_NOT_EMPTY)
相关推荐
懂点Tech6 小时前
ctfshow misc28:GIF 高度修改解题与脚本实现
开发语言·windows·python
云和数据.ChenGuang7 小时前
Python 重写(Override)深度解析:从 MRO 到 super() 的完整机制
java·开发语言·人工智能·python·langchain·1024程序员节
摇滚侠7 小时前
《On Java 中文版 基础卷》阅读笔记 实现隐藏 12
java·数据库·笔记
美狐美颜SDK开放平台8 小时前
视频美颜SDK试用DEMO阶段应该测试什么?直播APP接入实操指南
开发语言·人工智能·深度学习·音视频·美颜sdk·直播美颜sdk·第三方美颜sdk
dtq04248 小时前
C++小案例 - 日志实战
开发语言·c++
星夜离尘568 小时前
MATLAB ADC 码流触顶诊断:命中数、缺口分段与削顶不可辨识性
开发语言·matlab
码匠许师傅8 小时前
【C++三方组件】Qt 概览:桌面 C++ 的事实标准与许可证三轨
开发语言·c++·qt
码匠许师傅9 小时前
【C++三方组件】POCO:跨平台系统编程全家桶
开发语言·c++
silvamux_9 小时前
10款模型写种草笔记:可发布性、返工来源与成本数据缺口复盘
java·数据库·笔记
bkspiderx10 小时前
基于Socket的广播通信及C语言实现详解
c语言·开发语言·socket·广播·socket的广播通信