cli

Command-line interface for Radroots
git clone https://radroots.dev/git/cli.git
Log | Files | Refs | README | LICENSE

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 }