Skip to main content

rooky_core/
idb.rs

1#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Deserialize, serde::Serialize)]
2pub enum GameOrigin {
3    Annotated,
4    Received,
5    Public,
6    Unknown,
7}
8
9#[derive(Debug, Clone, PartialEq, Eq, serde::Deserialize, serde::Serialize)]
10pub struct RookyGameEntry {
11    pub id: String,
12    pub note: nostr_minions::nostro2::NostrNote,
13    pub origin: GameOrigin,
14}
15
16impl From<&RookyGameEntry> for crate::RookyGame {
17    fn from(entry: &RookyGameEntry) -> Self {
18        entry.note.content.parse::<Self>().unwrap_or_default()
19    }
20}
21impl From<RookyGameEntry> for crate::RookyGame {
22    fn from(entry: RookyGameEntry) -> Self {
23        entry.note.content.parse::<Self>().unwrap_or_default()
24    }
25}
26impl From<RookyGameEntry> for web_sys::wasm_bindgen::JsValue {
27    fn from(entry: RookyGameEntry) -> Self {
28        serde_wasm_bindgen::to_value(&entry).unwrap_or(Self::NULL)
29    }
30}
31impl TryFrom<web_sys::wasm_bindgen::JsValue> for RookyGameEntry {
32    type Error = web_sys::wasm_bindgen::JsValue;
33    fn try_from(value: web_sys::wasm_bindgen::JsValue) -> Result<Self, Self::Error> {
34        serde_wasm_bindgen::from_value(value).map_err(|e| {
35            web_sys::console::error_1(
36                &format!("Failed to convert JsValue to RookyGameEntry: {e:?}").into(),
37            );
38            web_sys::wasm_bindgen::JsValue::from_str("Conversion error")
39        })
40    }
41}
42impl nostr_minions::browser_api::IdbStoreManager for RookyGameEntry {
43    fn key(&self) -> web_sys::wasm_bindgen::JsValue {
44        web_sys::wasm_bindgen::JsValue::from_str(self.note.id.clone().unwrap_or_default().as_str())
45    }
46    fn config() -> nostr_minions::browser_api::IdbStoreConfig {
47        nostr_minions::browser_api::IdbStoreConfig {
48            store_name: "rooky_games",
49            db_name: "rooky_db",
50            db_version: 3,
51            document_key: "id",
52        }
53    }
54}