builder.rs 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. use crate::{
  2. errors::DispatchError,
  3. request::Payload,
  4. response::{EventResponse, StatusCode},
  5. };
  6. macro_rules! static_response {
  7. ($name:ident, $status:expr) => {
  8. #[allow(non_snake_case, missing_docs)]
  9. pub fn $name() -> ResponseBuilder { ResponseBuilder::new($status) }
  10. };
  11. }
  12. pub struct ResponseBuilder<T = Payload> {
  13. pub payload: T,
  14. pub status: StatusCode,
  15. pub error: Option<DispatchError>,
  16. }
  17. impl ResponseBuilder {
  18. pub fn new(status: StatusCode) -> Self {
  19. ResponseBuilder {
  20. payload: Payload::None,
  21. status,
  22. error: None,
  23. }
  24. }
  25. pub fn data<D: std::convert::Into<Payload>>(mut self, data: D) -> Self {
  26. self.payload = data.into();
  27. self
  28. }
  29. pub fn error(mut self, error: DispatchError) -> Self {
  30. self.error = Some(error);
  31. self
  32. }
  33. pub fn build(self) -> EventResponse {
  34. EventResponse {
  35. payload: self.payload,
  36. status_code: self.status,
  37. error: self.error,
  38. }
  39. }
  40. static_response!(Ok, StatusCode::Ok);
  41. static_response!(Err, StatusCode::Err);
  42. }