firebase_http_client 0.0.1-rc.1

Firebase client library for Rust providing Firestore and auth helpers.
Documentation
use dotenvy::dotenv;
use firebase_http_client::prelude::*;
use serde::{Deserialize, Serialize};
use std::env;

#[derive(Serialize, Deserialize, Debug)]
struct SomeDataForFirestore {
    name: String,
    age: u32,
    inner: SomeInnerStruct,
}

#[derive(Serialize, Deserialize, Debug)]
struct SomeInnerStruct {
    data: String,
    data_2: f64,
}

fn main() {
    dotenv().ok();

    let api_key = env::var("FIREBASE_API_KEY").unwrap_or_else(|_| {
        eprintln!("FIREBASE_API_KEY not set. Set .env variable FIREBASE_API_KEY");
        std::process::exit(1);
    });

    let project_id = env::var("FIREBASE_PROJECT_ID").unwrap_or_else(|_| {
        eprintln!("FIREBASE_PROJECT_ID not set. Set .env variable FIREBASE_PROJECT_ID.");
        std::process::exit(1);
    });

    let client = Client::new(api_key);
    let mut session = client.login().unwrap();
    let firestore = Firestore::new(project_id);
    let tests = firestore.collection("tests");
    let doc_1 = tests.doc("test_doc");

    doc_1
        .set(
            &mut session,
            SomeDataForFirestore {
                name: "John Doe".to_string(),
                age: 30,
                inner: SomeInnerStruct {
                    data: "Hello".to_string(),
                    data_2: 3.14,
                },
            },
        )
        .unwrap();

    Batch::new(firestore)
        .update(tests.doc("test_doc_2").with_data(SomeDataForFirestore {
            name: "Jane Doe".to_string(),
            age: 28,
            inner: SomeInnerStruct {
                data: "World".to_string(),
                data_2: 2.718,
            },
        }))
        .unwrap()
        .update(tests.doc("test_doc_3").with_data(SomeDataForFirestore {
            name: "Alice".to_string(),
            age: 25,
            inner: SomeInnerStruct {
                data: "Foo".to_string(),
                data_2: 1.618,
            },
        }))
        .unwrap()
        .delete(doc_1)
        .write(&mut session)
        .unwrap();

    let list = tests.get::<SomeDataForFirestore>(&mut session).unwrap();

    let added = tests
        .add(
            &mut session,
            SomeDataForFirestore {
                name: "Bob".to_string(),
                age: 1,
                inner: SomeInnerStruct {
                    data: "Bar".to_string(),
                    data_2: 1.414,
                },
            },
        )
        .unwrap();

    added.reference().delete(&mut session).unwrap();
    println!("{list:?}");
    println!("{:?}", added);
}