paypal_rust/client/
endpoint.rs1use std::borrow::Cow;
2use std::fmt::Debug;
3
4use reqwest::Url;
5use serde::de::DeserializeOwned;
6use serde::{Deserialize, Serialize};
7
8use crate::client::auth::AuthStrategy;
9use crate::client::paypal::Environment;
10use crate::client::request::{HttpRequestHeaders, RequestStrategy, RequestUrl};
11
12pub trait Endpoint: Send + Sync {
13 type QueryParams: Serialize;
15 type RequestBody: Serialize;
17 type ResponseBody: DeserializeOwned + Debug;
19
20 fn path(&self) -> Cow<str>;
22
23 fn headers(&self) -> HttpRequestHeaders {
25 HttpRequestHeaders::default()
26 }
27
28 fn query(&self) -> Option<Self::QueryParams> {
30 None
31 }
32
33 fn request_body(&self) -> Option<Self::RequestBody> {
35 None
36 }
37
38 fn request_method(&self) -> reqwest::Method {
40 reqwest::Method::GET
41 }
42
43 fn request_strategy(&self) -> RequestStrategy {
45 RequestStrategy::default()
46 }
47
48 fn auth_strategy(&self) -> AuthStrategy {
50 AuthStrategy::default()
51 }
52
53 fn request_url(&self, environment: Environment) -> Url {
55 let path = self.path();
56 let path = path.strip_prefix('/').unwrap_or(&path);
57
58 let mut request_url = match environment {
59 Environment::Sandbox => RequestUrl::Sandbox.as_url().expect("Invalid URL"),
61 Environment::Live => RequestUrl::Live.as_url().expect("Invalid URL"),
62 };
63
64 request_url.set_path(path);
65 request_url
66 }
67}
68
69#[derive(Debug, Copy, Clone, Deserialize, Default)]
70pub struct EmptyResponseBody {}