flutterwave_v3_models/fwcall/
mod.rs1use 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}