[actix-380玩彩网官网入口
use actix_http::header::tryintoheaderpair;
use actix_http::statuscode;
use actix_web::http::header::contenttype;
use actix_web::httpresponse;
use serde::{deserialize, serialize};
// 自定义 response
#[derive(deserialize, serialize, debug)]
pub(crate) struct r<t> {
pub(crate) code: i32,
pub(crate) msg: string,
pub(crate) data: option<t>,
}
// 在 r 结构体附近定义辅助方法
impl<t> r<t>
where
t: serialize,
{
// 创建成功的响应
pub fn success(data: t) -> httpresponse {
let r: r<t> = r {
code: statuscode::ok.as_u16() as i32,
msg: "请求成功".to_string(),
data: some(data),
};
httpresponse::build(statuscode::ok)
.insert_header(contenttype::json())
.json(r)
}
// 创建失败的响应
pub fn err() -> httpresponse {
let r: r<()> = r {
code: statuscode::internal_server_error.as_u16() as i32,
msg: "服务器异常".to_string(),
data: none,
};
httpresponse::build(statuscode::ok)
.insert_header(contenttype::json())
.json(r)
}
// 创建失败的响应
pub fn err_msg(msg: string) -> httpresponse {
let r: r<()> = r {
code: statuscode::internal_server_error.as_u16() as i32,
msg,
data: none,
};
httpresponse::build(statuscode::ok)
.insert_header(contenttype::json())
.json(r)
}
// 创建自定义状态码的响应
pub fn custom(code: i32, msg: string, data: option<t>) -> httpresponse {
let r: r<t> = r {
code,
msg,
data,
};
httpresponse::build(statuscode::ok)
.insert_header(contenttype::json())
.json(r)
}
}
#[post("/api/v1/deposits/list")]
async fn deposits_list(pool: web::data<pgpool>) -> impl responder {
let list = deposit::list(&pool).await;
match list {
ok(list) => r::success(list),
err(e) => {
// 处理错误,例如返回一个错误响应
eprintln!("error querying deposits: {:?}", e);
// 假设 r::error 是你用来处理错误响应的方法
return r::<string>::err_msg("failed to fetch deposits".to_string());
}
}
}
这种怎么样?
自己写个 struct 然后实现 responder ?