firebase-sdk-rs 0.1.0

A simple client for firebase
Documentation
use crate::env::load_dotenv;
use serde::{Deserialize, Serialize};
use std::{env, fs};

#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct ServiceAccountKey {
    pub r#type: String,
    pub project_id: String,
    pub private_key_id: String,
    pub private_key: String,
    pub client_email: String,
    pub client_id: String,
    pub auth_uri: String,
    pub token_uri: String,
    pub auth_provider_x509_cert_url: String,
    pub client_x509_cert_url: String,
    pub universe_domain: String,
}

impl ServiceAccountKey {
    pub fn from_file(path: &str) -> anyhow::Result<Self> {
        let json_str = fs::read_to_string(path)?;
        let key: Self = serde_json::from_str(&json_str)?;
        Ok(key)
    }

    pub fn from_env(app_env: Option<String>) -> anyhow::Result<Self> {
        load_dotenv(app_env);
        Ok(Self {
            r#type: env::var("SERVICE_ACCOUNT_KEY_TYPE")?,
            project_id: env::var("SERVICE_ACCOUNT_KEY_PROJECT_ID")?,
            private_key_id: env::var("SERVICE_ACCOUNT_KEY_PRIVATE_KEY_ID")?,
            private_key: env::var("SERVICE_ACCOUNT_KEY_PRIVATE_KEY")?,
            client_email: env::var("SERVICE_ACCOUNT_KEY_CLIENT_EMAIL")?,
            client_id: env::var("SERVICE_ACCOUNT_KEY_CLIENT_ID")?,
            auth_uri: env::var("SERVICE_ACCOUNT_KEY_AUTH_URI")?,
            token_uri: env::var("SERVICE_ACCOUNT_KEY_TOKEN_URI")?,
            auth_provider_x509_cert_url: env::var(
                "SERVICE_ACCOUNT_KEY_AUTH_PROVIDER_X509_CERT_URL",
            )?,
            client_x509_cert_url: env::var("SERVICE_ACCOUNT_KEY_CLIENT_X509_CERT_URL")?,
            universe_domain: env::var("SERVICE_ACCOUNT_KEY_UNIVERSE_DOMAIN")?,
        })
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    pub fn load_from_file() {
        let result = ServiceAccountKey::from_file("key.json");
        assert!(result.is_ok());
    }

    #[test]
    pub fn load_from_env() {
        let result = ServiceAccountKey::from_env(None);
        assert!(result.is_ok());
    }
}