hyperstack-stacks 0.6.2

Protocol stacks for Hyperstack - ready-to-use Solana data streams
Documentation
use super::types::{OreMiner, OreRound, OreTreasury};
use hyperstack_sdk::{Stack, StateView, ViewBuilder, ViewHandle, Views};

pub struct OreStreamStack;

impl Stack for OreStreamStack {
    type Views = OreStreamStackViews;

    fn name() -> &'static str {
        "ore-stream"
    }

    fn url() -> &'static str {
        "wss://ore.stack.usehyperstack.com"
    }
}

pub struct OreStreamStackViews {
    pub ore_round: OreRoundEntityViews,
    pub ore_treasury: OreTreasuryEntityViews,
    pub ore_miner: OreMinerEntityViews,
}

impl Views for OreStreamStackViews {
    fn from_builder(builder: ViewBuilder) -> Self {
        Self {
            ore_round: OreRoundEntityViews {
                builder: builder.clone(),
            },
            ore_treasury: OreTreasuryEntityViews {
                builder: builder.clone(),
            },
            ore_miner: OreMinerEntityViews { builder },
        }
    }
}

pub struct OreRoundEntityViews {
    builder: ViewBuilder,
}

impl OreRoundEntityViews {
    pub fn state(&self) -> StateView<OreRound> {
        StateView::new(
            self.builder.connection().clone(),
            self.builder.store().clone(),
            "OreRound/state".to_string(),
            self.builder.initial_data_timeout(),
        )
    }

    pub fn list(&self) -> ViewHandle<OreRound> {
        self.builder.view("OreRound/list")
    }

    pub fn latest(&self) -> ViewHandle<OreRound> {
        self.builder.view("OreRound/latest")
    }
}

pub struct OreTreasuryEntityViews {
    builder: ViewBuilder,
}

impl OreTreasuryEntityViews {
    pub fn state(&self) -> StateView<OreTreasury> {
        StateView::new(
            self.builder.connection().clone(),
            self.builder.store().clone(),
            "OreTreasury/state".to_string(),
            self.builder.initial_data_timeout(),
        )
    }

    pub fn list(&self) -> ViewHandle<OreTreasury> {
        self.builder.view("OreTreasury/list")
    }
}

pub struct OreMinerEntityViews {
    builder: ViewBuilder,
}

impl OreMinerEntityViews {
    pub fn state(&self) -> StateView<OreMiner> {
        StateView::new(
            self.builder.connection().clone(),
            self.builder.store().clone(),
            "OreMiner/state".to_string(),
            self.builder.initial_data_timeout(),
        )
    }

    pub fn list(&self) -> ViewHandle<OreMiner> {
        self.builder.view("OreMiner/list")
    }
}