plaid/request/
processor_signal_evaluate.rsuse crate::FluentRequest;
use serde::{Serialize, Deserialize};
use httpclient::InMemoryResponseExt;
use crate::model::{SignalDevice, SignalUser};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProcessorSignalEvaluateRequest {
pub amount: f64,
pub client_transaction_id: String,
pub client_user_id: Option<String>,
pub default_payment_method: Option<String>,
pub device: Option<SignalDevice>,
pub is_recurring: Option<bool>,
pub processor_token: String,
pub ruleset_key: Option<String>,
pub user: Option<SignalUser>,
pub user_present: Option<bool>,
}
impl FluentRequest<'_, ProcessorSignalEvaluateRequest> {
pub fn client_user_id(mut self, client_user_id: &str) -> Self {
self.params.client_user_id = Some(client_user_id.to_owned());
self
}
pub fn default_payment_method(mut self, default_payment_method: &str) -> Self {
self.params.default_payment_method = Some(default_payment_method.to_owned());
self
}
pub fn device(mut self, device: SignalDevice) -> Self {
self.params.device = Some(device);
self
}
pub fn is_recurring(mut self, is_recurring: bool) -> Self {
self.params.is_recurring = Some(is_recurring);
self
}
pub fn ruleset_key(mut self, ruleset_key: &str) -> Self {
self.params.ruleset_key = Some(ruleset_key.to_owned());
self
}
pub fn user(mut self, user: SignalUser) -> Self {
self.params.user = Some(user);
self
}
pub fn user_present(mut self, user_present: bool) -> Self {
self.params.user_present = Some(user_present);
self
}
}
impl<'a> ::std::future::IntoFuture
for FluentRequest<'a, ProcessorSignalEvaluateRequest> {
type Output = httpclient::InMemoryResult<
crate::model::ProcessorSignalEvaluateResponse,
>;
type IntoFuture = ::futures::future::BoxFuture<'a, Self::Output>;
fn into_future(self) -> Self::IntoFuture {
Box::pin(async move {
let url = "/processor/signal/evaluate";
let mut r = self.client.client.post(url);
r = r.json(serde_json::json!({ "amount" : self.params.amount }));
r = r
.json(
serde_json::json!(
{ "client_transaction_id" : self.params.client_transaction_id }
),
);
if let Some(ref unwrapped) = self.params.client_user_id {
r = r.json(serde_json::json!({ "client_user_id" : unwrapped }));
}
if let Some(ref unwrapped) = self.params.default_payment_method {
r = r.json(serde_json::json!({ "default_payment_method" : unwrapped }));
}
if let Some(ref unwrapped) = self.params.device {
r = r.json(serde_json::json!({ "device" : unwrapped }));
}
if let Some(ref unwrapped) = self.params.is_recurring {
r = r.json(serde_json::json!({ "is_recurring" : unwrapped }));
}
r = r
.json(
serde_json::json!(
{ "processor_token" : self.params.processor_token }
),
);
if let Some(ref unwrapped) = self.params.ruleset_key {
r = r.json(serde_json::json!({ "ruleset_key" : unwrapped }));
}
if let Some(ref unwrapped) = self.params.user {
r = r.json(serde_json::json!({ "user" : unwrapped }));
}
if let Some(ref unwrapped) = self.params.user_present {
r = r.json(serde_json::json!({ "user_present" : unwrapped }));
}
r = self.client.authenticate(r);
let res = r.await?;
res.json().map_err(Into::into)
})
}
}
impl crate::PlaidClient {
pub fn processor_signal_evaluate(
&self,
amount: f64,
client_transaction_id: &str,
processor_token: &str,
) -> FluentRequest<'_, ProcessorSignalEvaluateRequest> {
FluentRequest {
client: self,
params: ProcessorSignalEvaluateRequest {
amount,
client_transaction_id: client_transaction_id.to_owned(),
client_user_id: None,
default_payment_method: None,
device: None,
is_recurring: None,
processor_token: processor_token.to_owned(),
ruleset_key: None,
user: None,
user_present: None,
},
}
}
}