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}