Skip to main content

stellar_xdr/generated/
state_archival_settings.rs

1#[allow(unused_imports, clippy::wildcard_imports)]
2use super::*;
3
4/// StateArchivalSettings is an XDR Struct defined as:
5///
6/// ```text
7/// struct StateArchivalSettings {
8///     uint32 maxEntryTTL;
9///     uint32 minTemporaryTTL;
10///     uint32 minPersistentTTL;
11///
12///     // rent_fee = wfee_rate_average / rent_rate_denominator_for_type
13///     int64 persistentRentRateDenominator;
14///     int64 tempRentRateDenominator;
15///
16///     // max number of entries that emit archival meta in a single ledger
17///     uint32 maxEntriesToArchive;
18///
19///     // Number of snapshots to use when calculating average live Soroban State size
20///     uint32 liveSorobanStateSizeWindowSampleSize;
21///
22///     // How often to sample the live Soroban State size for the average, in ledgers
23///     uint32 liveSorobanStateSizeWindowSamplePeriod;
24///
25///     // Maximum number of bytes that we scan for eviction per ledger
26///     uint32 evictionScanSize;
27///
28///     // Lowest BucketList level to be scanned to evict entries
29///     uint32 startingEvictionScanLevel;
30/// };
31/// ```
32///
33#[cfg_attr(feature = "alloc", derive(Default))]
34#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
35#[cfg_attr(feature = "serde", cfg_eval::cfg_eval)]
36#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
37#[cfg_attr(
38    all(feature = "serde", feature = "alloc"),
39    serde_with::serde_as,
40    derive(serde::Serialize, serde::Deserialize),
41    serde(rename_all = "snake_case")
42)]
43#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
44pub struct StateArchivalSettings {
45    pub max_entry_ttl: u32,
46    pub min_temporary_ttl: u32,
47    pub min_persistent_ttl: u32,
48    #[cfg_attr(
49        all(feature = "serde", feature = "alloc"),
50        serde_as(as = "NumberOrString")
51    )]
52    pub persistent_rent_rate_denominator: i64,
53    #[cfg_attr(
54        all(feature = "serde", feature = "alloc"),
55        serde_as(as = "NumberOrString")
56    )]
57    pub temp_rent_rate_denominator: i64,
58    pub max_entries_to_archive: u32,
59    pub live_soroban_state_size_window_sample_size: u32,
60    pub live_soroban_state_size_window_sample_period: u32,
61    pub eviction_scan_size: u32,
62    pub starting_eviction_scan_level: u32,
63}
64
65impl ReadXdr for StateArchivalSettings {
66    #[cfg(feature = "std")]
67    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
68        r.with_limited_depth(|r| {
69            Ok(Self {
70                max_entry_ttl: u32::read_xdr(r)?,
71                min_temporary_ttl: u32::read_xdr(r)?,
72                min_persistent_ttl: u32::read_xdr(r)?,
73                persistent_rent_rate_denominator: i64::read_xdr(r)?,
74                temp_rent_rate_denominator: i64::read_xdr(r)?,
75                max_entries_to_archive: u32::read_xdr(r)?,
76                live_soroban_state_size_window_sample_size: u32::read_xdr(r)?,
77                live_soroban_state_size_window_sample_period: u32::read_xdr(r)?,
78                eviction_scan_size: u32::read_xdr(r)?,
79                starting_eviction_scan_level: u32::read_xdr(r)?,
80            })
81        })
82    }
83}
84
85impl WriteXdr for StateArchivalSettings {
86    #[cfg(feature = "std")]
87    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
88        w.with_limited_depth(|w| {
89            self.max_entry_ttl.write_xdr(w)?;
90            self.min_temporary_ttl.write_xdr(w)?;
91            self.min_persistent_ttl.write_xdr(w)?;
92            self.persistent_rent_rate_denominator.write_xdr(w)?;
93            self.temp_rent_rate_denominator.write_xdr(w)?;
94            self.max_entries_to_archive.write_xdr(w)?;
95            self.live_soroban_state_size_window_sample_size
96                .write_xdr(w)?;
97            self.live_soroban_state_size_window_sample_period
98                .write_xdr(w)?;
99            self.eviction_scan_size.write_xdr(w)?;
100            self.starting_eviction_scan_level.write_xdr(w)?;
101            Ok(())
102        })
103    }
104}