alloy_primitives/
sealed.rs1use crate::B256;
2
3#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
8#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
9pub struct Sealed<T> {
10 inner: T,
12 seal: B256,
14}
15
16impl<T> core::ops::Deref for Sealed<T> {
17 type Target = T;
18
19 fn deref(&self) -> &Self::Target {
20 self.inner()
21 }
22}
23
24impl<T> Sealed<T> {
25 pub const fn new_unchecked(inner: T, seal: B256) -> Self {
27 Self { inner, seal }
28 }
29
30 #[allow(clippy::missing_const_for_fn)] pub fn into_parts(self) -> (T, B256) {
33 (self.inner, self.seal)
34 }
35
36 #[allow(clippy::missing_const_for_fn)] pub fn split(self) -> (T, B256) {
39 self.into_parts()
40 }
41
42 #[inline(always)]
44 pub const fn inner(&self) -> &T {
45 &self.inner
46 }
47
48 #[inline(always)]
50 pub const fn seal(&self) -> B256 {
51 self.seal
52 }
53
54 #[inline(always)]
56 #[allow(clippy::missing_const_for_fn)] pub fn into_inner(self) -> T {
58 self.inner
59 }
60
61 #[inline(always)]
64 #[allow(clippy::missing_const_for_fn)] pub fn unseal(self) -> T {
66 self.into_inner()
67 }
68}
69
70pub trait Sealable: Sized {
72 fn hash_slow(&self) -> B256;
74
75 fn seal_slow(self) -> Sealed<Self> {
77 let seal = self.hash_slow();
78 Sealed::new_unchecked(self, seal)
79 }
80
81 fn seal_unchecked(self, seal: B256) -> Sealed<Self> {
83 Sealed::new_unchecked(self, seal)
84 }
85}