builder.rs 920 B

12345678910111213141516171819202122232425262728293031323334353637383940
  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 { ResponseBuilder::new($status) }
  9. };
  10. }
  11. pub struct ResponseBuilder<T = Payload> {
  12. pub payload: T,
  13. pub status: StatusCode,
  14. }
  15. impl ResponseBuilder {
  16. pub fn new(status: StatusCode) -> Self {
  17. ResponseBuilder {
  18. payload: Payload::None,
  19. status,
  20. }
  21. }
  22. pub fn data<D: std::convert::Into<Payload>>(mut self, data: D) -> Self {
  23. self.payload = data.into();
  24. self
  25. }
  26. pub fn build(self) -> EventResponse {
  27. EventResponse {
  28. payload: self.payload,
  29. status_code: self.status,
  30. }
  31. }
  32. static_response!(Ok, StatusCode::Ok);
  33. static_response!(Err, StatusCode::Err);
  34. }