dimo_rust_sdk/utils/
credentials.rs

1use std::env;
2use std::error::Error;
3use serde::Deserialize;
4
5#[derive(Debug)]
6pub enum CredentialsError {
7    MissingCredentials,
8    MissingFields(Vec<&'static str>),
9}
10
11#[derive(Debug, Deserialize, Clone)]
12pub struct Credentials {
13    pub client_id: String,
14    pub private_key: String,
15    pub domain: String,
16    pub developer_jwt: String,
17    pub vehicle_jwt: String,
18}
19
20pub fn get_credentials() -> Result<Credentials, Box<dyn Error>> {
21    let client_id = env::var("CLIENT_ID").unwrap_or_default();
22    let private_key = env::var("API_KEY").unwrap_or_default();
23    let domain = env::var("REDIRECT_URI").unwrap_or_default();
24    let developer_jwt = env::var("DEVELOPER_JWT").ok().unwrap_or_default();
25    let vehicle_jwt = env::var("VEHICLE_JWT").ok().unwrap_or_default();
26
27    let mut missing_fields = Vec::new();
28    if client_id.is_empty() {
29        missing_fields.push("client_id");
30    }
31    if private_key.is_empty() {
32        missing_fields.push("api_key");
33    }
34    if domain.is_empty() {
35        missing_fields.push("redirect_uri");
36    }
37
38    if !missing_fields.is_empty() {
39        return Err(format!("Missing required fields: {:?}", missing_fields).into());
40    }
41
42    Ok(Credentials {
43        client_id,
44        private_key,
45        domain,
46        developer_jwt,
47        vehicle_jwt,
48    })
49}