dimo_rust_sdk/utils/
credentials.rs1use 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}