1use firebase_js_sys::ModuleApp;
2use serde::{Deserialize, Serialize};
3use wasm_bindgen::prelude::*;
4
5use serde_wasm_bindgen::to_value;
6
7use crate::FirebaseError;
8
9#[derive(Serialize, Deserialize)]
10pub struct FirebaseConfig {
11 #[serde(rename = "apiKey")]
12 pub api_key: String,
13
14 #[serde(rename = "authDomain")]
15 pub auth_domain: String,
16
17 #[serde(rename = "projectId")]
18 pub project_id: String,
19
20 #[serde(rename = "storageBucket")]
21 pub storage_bucket: String,
22
23 #[serde(rename = "messagingSenderId")]
24 pub messaging_sender_id: String,
25
26 #[serde(rename = "appId")]
27 pub app_id: String,
28
29 #[serde(rename = "measurementId")]
30 pub measurement_id: String,
31
32 #[serde(rename = "databaseURL")]
33 pub database_url: String,
34}
35
36pub struct FirebaseApp(JsValue);
37
38impl Into<JsValue> for FirebaseApp {
39 fn into(self) -> JsValue {
40 self.0
41 }
42}
43
44impl FirebaseApp {
45 pub fn get_js_value(&self) -> &JsValue {
46 &self.0
47 }
48}
49
50pub fn initialize_app(firebase_config: &FirebaseConfig) -> Result<FirebaseApp, FirebaseError> {
51 match to_value(firebase_config) {
52 Ok(val) => {
53 let app: JsValue = ModuleApp::initialize_app(&val);
54 Ok(FirebaseApp(app))
55 },
56 Err(_) => Err(FirebaseError::UnimplementedErrorHandling),
57 }
58}