actix_helper_macros/
lib.rs

1extern crate actix_web;
2extern crate serde;
3
4extern crate actix_proc_macros;
5pub use actix_proc_macros::*;
6
7#[allow(type_alias_bounds)] // Even if this isn't enforced, I want to express intent explicitly to human readers
8pub type ResponderResult<T: serde::Serialize> = Result<Response<T>, Box<dyn std::error::Error>>;
9
10pub enum Response<T: serde::Serialize> {
11	Json(T),
12	Text(String),
13	Builder(actix_web::HttpResponseBuilder),
14	Complete(actix_web::HttpResponse)
15}
16
17#[macro_export]
18macro_rules! code {
19    ($code: ident) => { ::actix_helper_macros::Response::Builder(::actix_web::HttpResponse::$code()) };
20}
21
22#[macro_export]
23macro_rules! text {
24	($val: expr) => { ::actix_helper_macros::Response::Text($val.to_string()) };
25}
26
27#[macro_export]
28macro_rules! json {
29    ($val: expr) => { ::actix_helper_macros::Response::Json($val) };
30}
31
32#[macro_export]
33macro_rules! response {
34	($response: expr) => { ::actix_helper_macros::Response::Complete($response) };
35}
36
37#[macro_export]
38macro_rules! or_404 {
39    ($item: expr) => {
40        match $item {
41            None => { return Ok(code!(NotFound)) }
42            Some(v) => v
43        }
44    }
45}
46