polymarket_client/secure/
credentials.rs1use polymarket_client_sdk_v2::auth::Credentials;
2use secrecy::{ExposeSecret, SecretString};
3use serde::Deserialize;
4use uuid::Uuid;
5
6#[derive(Clone, Debug, Deserialize)]
10pub struct ApiCredentials {
11 pub key: String,
12 secret: SecretString,
13 passphrase: SecretString,
14}
15
16impl ApiCredentials {
17 pub fn new(
18 key: impl Into<String>,
19 secret: impl Into<String>,
20 passphrase: impl Into<String>,
21 ) -> Self {
22 Self {
23 key: key.into(),
24 secret: SecretString::from(secret.into()),
25 passphrase: SecretString::from(passphrase.into()),
26 }
27 }
28
29 pub fn key_uuid(&self) -> Result<Uuid, uuid::Error> {
30 Uuid::parse_str(&self.key)
31 }
32
33 pub fn secret(&self) -> &SecretString {
34 &self.secret
35 }
36
37 pub fn passphrase(&self) -> &SecretString {
38 &self.passphrase
39 }
40
41 pub(crate) fn to_sdk_credentials(&self) -> Result<Credentials, uuid::Error> {
42 Ok(Credentials::new(
43 self.key_uuid()?,
44 self.secret.expose_secret().to_string(),
45 self.passphrase.expose_secret().to_string(),
46 ))
47 }
48
49 pub(crate) fn from_sdk(credentials: &Credentials) -> Self {
50 Self {
51 key: credentials.key().to_string(),
52 secret: credentials.secret().clone(),
53 passphrase: credentials.passphrase().clone(),
54 }
55 }
56}
57
58#[cfg(test)]
59mod tests {
60 use super::*;
61
62 #[test]
63 fn round_trips_key() {
64 let id = Uuid::new_v4();
65 let creds = ApiCredentials::new(id.to_string(), "secret", "pass");
66 assert_eq!(creds.key_uuid().unwrap(), id);
67 }
68}