builder.rs 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. use crate::{
  2. error::SystemError,
  3. response::{data::ResponseData, 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 = ResponseData> {
  12. pub data: T,
  13. pub status: StatusCode,
  14. pub error: Option<SystemError>,
  15. }
  16. impl ResponseBuilder {
  17. pub fn new(status: StatusCode) -> Self {
  18. ResponseBuilder {
  19. data: ResponseData::None,
  20. status,
  21. error: None,
  22. }
  23. }
  24. pub fn data<D: std::convert::Into<ResponseData>>(mut self, data: D) -> Self {
  25. self.data = data.into();
  26. self
  27. }
  28. pub fn error(mut self, error: SystemError) -> Self {
  29. self.error = Some(error);
  30. self
  31. }
  32. pub fn build(self) -> EventResponse {
  33. EventResponse {
  34. data: self.data,
  35. status: self.status,
  36. error: self.error,
  37. }
  38. }
  39. static_response!(Ok, StatusCode::Ok);
  40. static_response!(Err, StatusCode::Err);
  41. }