hyperstack_stacks/ore/
entity.rs1use 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}