fireplace 0.6.2

A client for Firebase that seeks to provide a user-friendly interface to interact with Firestore, Firebase Auth, and similar.
Documentation
use std::env;

use serde::Deserialize;

use crate::{
    ServiceAccount,
    firestore::{client::FirestoreClient, collection},
};

use super::client::FirestoreClientOptions;

pub async fn initialise() -> Result<FirestoreClient, anyhow::Error> {
    let service_account = ServiceAccount {
        project_id: env::var("FIREBASE_PROJECT_ID")?,
        client_id: env::var("FIREBASE_CLIENT_ID")?,
        client_email: env::var("FIREBASE_CLIENT_EMAIL")?,
        private_key_id: env::var("FIREBASE_PRIVATE_KEY_ID")?,
        private_key: env::var("FIREBASE_PRIVATE_KEY")?.replace(r"\n", "\n"),
    };

    let client_options = FirestoreClientOptions::default();
    let client = FirestoreClient::initialise(service_account, client_options)
        .await
        .unwrap();

    Ok(client)
}

#[derive(Deserialize, Debug, PartialEq)]
pub struct Landmark {
    pub name: String,
    pub r#type: String,
}

pub async fn setup_landmarks_example(client: &mut FirestoreClient) -> Result<(), anyhow::Error> {
    client
        .set_document(
            &collection("cities")
                .doc("SF")
                .collection("landmarks")
                .doc("golden-gate"),
            &serde_json::json!({ "name": "Golden Gate Bridge", "type": "bridge" }),
        )
        .await?;

    client
        .set_document(
            &collection("cities")
                .doc("SF")
                .collection("landmarks")
                .doc("legion-honor"),
            &serde_json::json!({ "name": "Legion of Honor", "type": "museum" }),
        )
        .await?;

    client
        .set_document(
            &collection("cities")
                .doc("TOK")
                .collection("landmarks")
                .doc("national-science-museum"),
            &serde_json::json!({ "name": "National Museum of Nature and Science", "type": "museum" }),
        )
        .await?;

    Ok(())
}