· 6 years ago · Jul 30, 2019, 04:18 AM
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
10/// Actual Credential struct
11pub struct StripeCredentials {
12 pub secret_key: String,
13}
14
15/// Marker trait implementation for specifying ApiCredential
16impl ApiCredential for StripeCredentials {}
17
18pub struct ClientFactory;
19
20impl ClientFactory {
21 fn get_client<C: ApiCredential>(credentials: C) -> String {
22 let creds = match credentials {
23 StripeCredentials => credentials.secret_key
24 };
25 creds
26 }
27}
28
29/*
30 pub fn get_client<'a, T: PaymentProvider<'a>>(self) -> T {
31 T::new(self.credentials)
32 }
33*/