· 6 years ago · Jul 30, 2019, 01:44 PM
1fn main() {
2 let secret_key = "sk_test".to_string();
3 let creds = StripeCredentials { secret_key };
4 println!("{}", ClientFactory::get_client(creds));
5}
6
7/// Marker trait
8pub trait ApiCredential {
9 fn get (&self) -> String;
10}
11
12/// Actual Credential struct
13pub struct StripeCredentials {
14 pub secret_key: String,
15}
16
17/// Marker trait implementation for specifying ApiCredential
18impl ApiCredential for StripeCredentials {
19 fn get (&self) -> String {
20 self.secret_key.clone()
21 }
22}
23
24pub struct ClientFactory;
25
26impl ClientFactory {
27 fn get_client<C: ApiCredential>(credentials: C) -> String {
28 credentials.get()
29 }
30}
31
32/*
33 pub fn get_client<'a, T: PaymentProvider<'a>>(self) -> T {
34 T::new(self.credentials)
35 }
36*/