firebase-js 0.0.1

High level interop with `npm`s `firebase@9` package for `wasm32-unknown-unknown` web targets.
Documentation
use firebase_js_sys::ModuleApp;
use serde::{Deserialize, Serialize};
use wasm_bindgen::prelude::*;

use serde_wasm_bindgen::to_value;

use crate::FirebaseError;

#[derive(Serialize, Deserialize)]
pub struct FirebaseConfig {
	#[serde(rename = "apiKey")]
	pub api_key: String,

	#[serde(rename = "authDomain")]
	pub auth_domain: String,

	#[serde(rename = "projectId")]
	pub project_id: String,

	#[serde(rename = "storageBucket")]
	pub storage_bucket: String,

	#[serde(rename = "messagingSenderId")]
	pub messaging_sender_id: String,

	#[serde(rename = "appId")]
	pub app_id: String,

	#[serde(rename = "measurementId")]
	pub measurement_id: String,

	#[serde(rename = "databaseURL")]
	pub database_url: String,
}

pub struct FirebaseApp(JsValue);

impl Into<JsValue> for FirebaseApp {
	fn into(self) -> JsValue {
		self.0
	}
}

impl FirebaseApp {
	pub fn get_js_value(&self) -> &JsValue {
		&self.0
	}
}

pub fn initialize_app(firebase_config: &FirebaseConfig) -> Result<FirebaseApp, FirebaseError> {
	match to_value(firebase_config) {
		Ok(val) => {
			let app: JsValue = ModuleApp::initialize_app(&val);
			Ok(FirebaseApp(app))
		},
		Err(_) => Err(FirebaseError::UnimplementedErrorHandling),
	}
}