Skip to main content

hyperstack_stacks/ore/
entity.rs

1use super::types::{OreMiner, OreRound, OreTreasury};
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 {
28                builder: builder.clone(),
29            },
30            ore_treasury: OreTreasuryEntityViews {
31                builder: builder.clone(),
32            },
33            ore_miner: OreMinerEntityViews { builder },
34        }
35    }
36}
37
38pub struct OreRoundEntityViews {
39    builder: ViewBuilder,
40}
41
42impl OreRoundEntityViews {
43    pub fn state(&self) -> StateView<OreRound> {
44        StateView::new(
45            self.builder.connection().clone(),
46            self.builder.store().clone(),
47            "OreRound/state".to_string(),
48            self.builder.initial_data_timeout(),
49        )
50    }
51
52    pub fn list(&self) -> ViewHandle<OreRound> {
53        self.builder.view("OreRound/list")
54    }
55
56    pub fn latest(&self) -> ViewHandle<OreRound> {
57        self.builder.view("OreRound/latest")
58    }
59}
60
61pub struct OreTreasuryEntityViews {
62    builder: ViewBuilder,
63}
64
65impl OreTreasuryEntityViews {
66    pub fn state(&self) -> StateView<OreTreasury> {
67        StateView::new(
68            self.builder.connection().clone(),
69            self.builder.store().clone(),
70            "OreTreasury/state".to_string(),
71            self.builder.initial_data_timeout(),
72        )
73    }
74
75    pub fn list(&self) -> ViewHandle<OreTreasury> {
76        self.builder.view("OreTreasury/list")
77    }
78}
79
80pub struct OreMinerEntityViews {
81    builder: ViewBuilder,
82}
83
84impl OreMinerEntityViews {
85    pub fn state(&self) -> StateView<OreMiner> {
86        StateView::new(
87            self.builder.connection().clone(),
88            self.builder.store().clone(),
89            "OreMiner/state".to_string(),
90            self.builder.initial_data_timeout(),
91        )
92    }
93
94    pub fn list(&self) -> ViewHandle<OreMiner> {
95        self.builder.view("OreMiner/list")
96    }
97}