penumbra_sdk_distributions/
event.rs

1use anyhow::{anyhow, Context as _};
2use penumbra_sdk_num::Amount;
3use penumbra_sdk_proto::{
4    penumbra::core::component::distributions::v1 as pb, DomainType, Name as _,
5};
6
7#[derive(Clone, Debug)]
8pub struct EventLqtPoolSizeIncrease {
9    pub epoch_index: u64,
10    pub increase: Amount,
11    pub new_total: Amount,
12}
13
14impl TryFrom<pb::EventLqtPoolSizeIncrease> for EventLqtPoolSizeIncrease {
15    type Error = anyhow::Error;
16
17    fn try_from(value: pb::EventLqtPoolSizeIncrease) -> Result<Self, Self::Error> {
18        fn inner(value: pb::EventLqtPoolSizeIncrease) -> anyhow::Result<EventLqtPoolSizeIncrease> {
19            Ok(EventLqtPoolSizeIncrease {
20                epoch_index: value.epoch,
21                increase: value
22                    .increase
23                    .ok_or(anyhow!("missing `increase`"))?
24                    .try_into()?,
25                new_total: value
26                    .new_total
27                    .ok_or(anyhow!("missing `new_total`"))?
28                    .try_into()?,
29            })
30        }
31        inner(value).context(format!("parsing {}", pb::EventLqtPoolSizeIncrease::NAME))
32    }
33}
34
35impl From<EventLqtPoolSizeIncrease> for pb::EventLqtPoolSizeIncrease {
36    fn from(value: EventLqtPoolSizeIncrease) -> Self {
37        Self {
38            epoch: value.epoch_index,
39            increase: Some(value.increase.into()),
40            new_total: Some(value.new_total.into()),
41        }
42    }
43}
44
45impl DomainType for EventLqtPoolSizeIncrease {
46    type Proto = pb::EventLqtPoolSizeIncrease;
47}