Skip to main content

hyperstack_stacks/ore/
entity.rs

1use super::types::{OreRound, OreTreasury, OreMiner};
2use hyperstack_sdk::{Stack, StateView, ViewBuilder, ViewHandle, Views};
3
4pub struct OreStreamStack;
5
6impl Stack for OreStreamStack {
7    type Views = OreStreamStackViews;
8
9    fn name() -> &'static str {
10        "ore-stream"
11    }
12
13    fn url() -> &'static str {
14        "wss://ore.stack.usehyperstack.com"
15    }
16}
17
18pub struct OreStreamStackViews {
19    pub ore_round: OreRoundEntityViews,
20    pub ore_treasury: OreTreasuryEntityViews,
21    pub ore_miner: OreMinerEntityViews,
22}
23
24impl Views for OreStreamStackViews {
25    fn from_builder(builder: ViewBuilder) -> Self {
26        Self {
27            ore_round: OreRoundEntityViews { builder: builder.clone() },
28            ore_treasury: OreTreasuryEntityViews { builder: builder.clone() },
29            ore_miner: OreMinerEntityViews { builder },
30        }
31    }
32}
33
34pub struct OreRoundEntityViews {
35    builder: ViewBuilder,
36}
37
38impl OreRoundEntityViews {
39    pub fn state(&self) -> StateView<OreRound> {
40        StateView::new(
41            self.builder.connection().clone(),
42            self.builder.store().clone(),
43            "OreRound/state".to_string(),
44            self.builder.initial_data_timeout(),
45        )
46    }
47
48    pub fn list(&self) -> ViewHandle<OreRound> {
49        self.builder.view("OreRound/list")
50    }
51
52    pub fn latest(&self) -> ViewHandle<OreRound> {
53        self.builder.view("OreRound/latest")
54    }
55}
56
57pub struct OreTreasuryEntityViews {
58    builder: ViewBuilder,
59}
60
61impl OreTreasuryEntityViews {
62    pub fn state(&self) -> StateView<OreTreasury> {
63        StateView::new(
64            self.builder.connection().clone(),
65            self.builder.store().clone(),
66            "OreTreasury/state".to_string(),
67            self.builder.initial_data_timeout(),
68        )
69    }
70
71    pub fn list(&self) -> ViewHandle<OreTreasury> {
72        self.builder.view("OreTreasury/list")
73    }
74}
75
76pub struct OreMinerEntityViews {
77    builder: ViewBuilder,
78}
79
80impl OreMinerEntityViews {
81    pub fn state(&self) -> StateView<OreMiner> {
82        StateView::new(
83            self.builder.connection().clone(),
84            self.builder.store().clone(),
85            "OreMiner/state".to_string(),
86            self.builder.initial_data_timeout(),
87        )
88    }
89
90    pub fn list(&self) -> ViewHandle<OreMiner> {
91        self.builder.view("OreMiner/list")
92    }
93}