light_compressed_account/instruction_data/
compressed_proof.rs

1use light_zero_copy::{errors::ZeroCopyError, traits::ZeroCopyAt, ZeroCopyMut};
2use zerocopy::{FromBytes, Immutable, IntoBytes, KnownLayout, Ref, Unaligned};
3
4use crate::{AnchorDeserialize, AnchorSerialize};
5
6#[repr(C)]
7#[derive(
8    Debug,
9    Clone,
10    Copy,
11    PartialEq,
12    Eq,
13    AnchorDeserialize,
14    AnchorSerialize,
15    KnownLayout,
16    Immutable,
17    FromBytes,
18    IntoBytes,
19    Unaligned,
20    ZeroCopyMut,
21)]
22pub struct CompressedProof {
23    pub a: [u8; 32],
24    pub b: [u8; 64],
25    pub c: [u8; 32],
26}
27
28impl Default for CompressedProof {
29    fn default() -> Self {
30        Self {
31            a: [0; 32],
32            b: [0; 64],
33            c: [0; 32],
34        }
35    }
36}
37
38impl<'a> ZeroCopyAt<'a> for CompressedProof {
39    type ZeroCopyAt = Ref<&'a [u8], Self>;
40    fn zero_copy_at(bytes: &'a [u8]) -> Result<(Self::ZeroCopyAt, &'a [u8]), ZeroCopyError> {
41        Ok(Ref::<&[u8], CompressedProof>::from_prefix(bytes)?)
42    }
43}
44
45#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, AnchorDeserialize, AnchorSerialize)]
46pub struct ValidityProof(pub Option<CompressedProof>);
47
48impl ValidityProof {
49    pub fn new(proof: Option<CompressedProof>) -> Self {
50        Self(proof)
51    }
52}
53
54impl From<CompressedProof> for ValidityProof {
55    fn from(proof: CompressedProof) -> Self {
56        Self(Some(proof))
57    }
58}
59
60impl From<Option<CompressedProof>> for ValidityProof {
61    fn from(proof: Option<CompressedProof>) -> Self {
62        Self(proof)
63    }
64}
65impl From<&CompressedProof> for ValidityProof {
66    fn from(proof: &CompressedProof) -> Self {
67        Self(Some(*proof))
68    }
69}
70
71impl From<&Option<CompressedProof>> for ValidityProof {
72    fn from(proof: &Option<CompressedProof>) -> Self {
73        Self(*proof)
74    }
75}
76
77#[allow(clippy::from_over_into)]
78impl Into<Option<CompressedProof>> for ValidityProof {
79    fn into(self) -> Option<CompressedProof> {
80        self.0
81    }
82}