Skip to main content

radicle/cob/store/
access.rs

1//! Stores carry [`Access`] to indicate allowed access modes. In particular
2//! whether writes to the store are allowed.
3
4pub use seal::Access;
5
6/// [`ReadOnly`] is used for read-only [`Access`].
7pub struct ReadOnly;
8
9/// [`WriteAs`] is used for write [`Access`].
10pub struct WriteAs<'a, Signer> {
11    pub(super) signer: &'a Signer,
12}
13
14impl<'a, Signer> WriteAs<'a, Signer> {
15    pub fn new(signer: &'a Signer) -> Self {
16        Self { signer }
17    }
18}
19
20// See <https://predr.ag/blog/definitive-guide-to-sealed-traits-in-rust/#sealing-traits-via-method-signatures>.
21#[allow(private_interfaces)]
22mod seal {
23    enum Seal {}
24
25    /// Marker trait for COB store access modes.
26    pub trait Access {
27        fn seal(&self, _: Seal);
28    }
29
30    impl Access for super::ReadOnly {
31        fn seal(&self, _: Seal) {}
32    }
33
34    impl<Signer> Access for super::WriteAs<'_, Signer> {
35        fn seal(&self, _: Seal) {}
36    }
37}