sui_config/
certificate_deny_config.rs1use once_cell::sync::OnceCell;
5use serde::{Deserialize, Serialize};
6use std::collections::HashSet;
7use sui_types::base_types::TransactionDigest;
8
9#[derive(Clone, Debug, Default, Deserialize, Serialize)]
10#[serde(rename_all = "kebab-case")]
11pub struct CertificateDenyConfig {
12 #[serde(default, skip_serializing_if = "Vec::is_empty")]
23 certificate_deny_list: Vec<TransactionDigest>,
24
25 #[serde(skip)]
27 certificate_deny_set: OnceCell<HashSet<TransactionDigest>>,
28}
29
30impl CertificateDenyConfig {
31 pub fn new() -> Self {
32 Self::default()
33 }
34
35 pub fn certificate_deny_set(&self) -> &HashSet<TransactionDigest> {
36 self.certificate_deny_set.get_or_init(|| {
37 self.certificate_deny_list
38 .iter()
39 .cloned()
40 .collect::<HashSet<_>>()
41 })
42 }
43}
44
45#[derive(Default)]
46pub struct CertificateDenyConfigBuilder {
47 config: CertificateDenyConfig,
48}
49
50impl CertificateDenyConfigBuilder {
51 pub fn new() -> Self {
52 Self::default()
53 }
54
55 pub fn build(self) -> CertificateDenyConfig {
56 self.config
57 }
58
59 pub fn add_certificate_deny(mut self, certificate: TransactionDigest) -> Self {
60 self.config.certificate_deny_list.push(certificate);
61 self
62 }
63}