flutterwave_v3_models/fwcall/
mod.rs

1use serde::de::DeserializeOwned;
2use serde::{Deserialize, Serialize};
3use std::borrow::Cow;
4use std::marker::PhantomData;
5use crate::common::payload::Payload;
6
7#[derive(Debug)]
8pub struct FwCall<'a, T: Serialize, R: Deserialize<'a>> {
9    #[allow(unused)]
10    pub path: Cow<'a, str>,
11    #[allow(unused)]
12    pub method: reqwest::Method,
13    #[allow(unused)]
14    pub payload: Option<Payload<T>>,
15    _phantom: PhantomData<R>,
16}
17
18impl<'a, T: Serialize, R: Deserialize<'a>> FwCall<'a, T, R> {
19    pub fn new(path: Cow<'a, str>, method: reqwest::Method, payload: Option<Payload<T>>) -> Self {
20        Self {
21            path,
22            method,
23            payload,
24            _phantom: PhantomData,
25        }
26    }
27}
28
29pub trait ToFwCall<'a>
30where
31    Self: Deserialize<'a> + Serialize + validator::Validate,
32    Self::ApiResponse: DeserializeOwned + Serialize,
33    Self::ApiRequest: Deserialize<'a> + Serialize + validator::Validate,
34{
35    type ApiRequest;
36
37    type ApiResponse;
38
39    #[allow(unused)]
40    fn get_call(self) -> FwCall<'a, Self::ApiRequest, Self::ApiResponse>;
41
42    #[allow(unused)]
43    fn to_call(
44        self,
45    ) -> Result<
46        FwCall<'a, Self::ApiRequest, Self::ApiResponse>,
47        crate::errors::FWaveError,
48    > {
49        self.validate()?;
50        Ok(self.get_call())
51    }
52}