builder.rs 994 B

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