penumbra_sdk_ibc/component/
view.rs1use anyhow::Result;
2use async_trait::async_trait;
3use cnidarium::{StateRead, StateWrite};
4use penumbra_sdk_proto::{StateReadProto, StateWriteProto};
5
6use crate::params::IBCParameters;
7
8use super::state_key;
9
10#[async_trait]
11pub trait StateWriteExt: StateWrite {
12 fn put_ibc_params(&mut self, params: IBCParameters) {
14 self.put(state_key::ibc_params().into(), params)
15 }
16}
17
18impl<T: StateWrite + ?Sized> StateWriteExt for T {}
19
20#[async_trait]
21pub trait StateReadExt: StateRead {
22 async fn get_ibc_params(&self) -> Result<IBCParameters> {
24 self.get(state_key::ibc_params())
25 .await?
26 .ok_or_else(|| anyhow::anyhow!("Missing IBCParameters"))
27 }
28}
29
30impl<T: StateRead + ?Sized> StateReadExt for T {}