service.rs 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. use std::future::Future;
  2. use crate::{
  3. request::{payload::Payload, EventRequest},
  4. response::EventResponse,
  5. };
  6. pub trait Service<Request> {
  7. type Response;
  8. type Error;
  9. type Future: Future<Output = Result<Self::Response, Self::Error>>;
  10. fn call(&self, req: Request) -> Self::Future;
  11. }
  12. pub trait ServiceFactory<Request> {
  13. type Response;
  14. type Error;
  15. type Service: Service<Request, Response = Self::Response, Error = Self::Error>;
  16. type Context;
  17. type Future: Future<Output = Result<Self::Service, Self::Error>>;
  18. fn new_service(&self, cfg: Self::Context) -> Self::Future;
  19. }
  20. pub struct ServiceRequest {
  21. req: EventRequest,
  22. payload: Payload,
  23. }
  24. impl ServiceRequest {
  25. pub fn new(req: EventRequest, payload: Payload) -> Self {
  26. Self { req, payload }
  27. }
  28. #[inline]
  29. pub fn into_parts(self) -> (EventRequest, Payload) {
  30. (self.req, self.payload)
  31. }
  32. }
  33. pub struct ServiceResponse {
  34. request: EventRequest,
  35. response: EventResponse,
  36. }
  37. impl ServiceResponse {
  38. pub fn new(request: EventRequest, response: EventResponse) -> Self {
  39. ServiceResponse { request, response }
  40. }
  41. pub fn into_parts(self) -> (EventRequest, EventResponse) {
  42. (self.request, self.response)
  43. }
  44. }