adapter.rs (884B)
1 use super::error::OperationAdapterError; 2 use super::request::{OperationRequest, OperationRequestPayload}; 3 use super::result::{OperationResult, OperationResultPayload}; 4 5 pub trait OperationService<P: OperationRequestPayload> { 6 type Result: OperationResultPayload; 7 8 fn execute( 9 &self, 10 request: OperationRequest<P>, 11 ) -> Result<OperationResult<Self::Result>, OperationAdapterError>; 12 } 13 14 #[derive(Debug, Clone)] 15 pub struct OperationAdapter<S> { 16 service: S, 17 } 18 19 impl<S> OperationAdapter<S> { 20 pub fn new(service: S) -> Self { 21 Self { service } 22 } 23 24 pub fn execute<P>( 25 &self, 26 request: OperationRequest<P>, 27 ) -> Result<OperationResult<<S as OperationService<P>>::Result>, OperationAdapterError> 28 where 29 P: OperationRequestPayload, 30 S: OperationService<P>, 31 { 32 self.service.execute(request) 33 } 34 }