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