light_compressed_account/instruction_data/
compressed_proof.rs

1use light_zero_copy::{borsh::Deserialize, errors::ZeroCopyError};
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)]
21pub struct CompressedProof {
22    pub a: [u8; 32],
23    pub b: [u8; 64],
24    pub c: [u8; 32],
25}
26
27impl Default for CompressedProof {
28    fn default() -> Self {
29        Self {
30            a: [0; 32],
31            b: [0; 64],
32            c: [0; 32],
33        }
34    }
35}
36
37impl<'a> Deserialize<'a> for CompressedProof {
38    type Output = Ref<&'a [u8], Self>;
39    fn zero_copy_at(bytes: &'a [u8]) -> Result<(Self::Output, &'a [u8]), ZeroCopyError> {
40        Ok(Ref::<&[u8], CompressedProof>::from_prefix(bytes)?)
41    }
42}
43
44#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, AnchorDeserialize, AnchorSerialize)]
45pub struct ValidityProof(pub Option<CompressedProof>);
46
47impl ValidityProof {
48    pub fn new(proof: Option<CompressedProof>) -> Self {
49        Self(proof)
50    }
51}
52
53impl From<CompressedProof> for ValidityProof {
54    fn from(proof: CompressedProof) -> Self {
55        Self(Some(proof))
56    }
57}
58
59impl From<Option<CompressedProof>> for ValidityProof {
60    fn from(proof: Option<CompressedProof>) -> Self {
61        Self(proof)
62    }
63}
64impl From<&CompressedProof> for ValidityProof {
65    fn from(proof: &CompressedProof) -> Self {
66        Self(Some(*proof))
67    }
68}
69
70impl From<&Option<CompressedProof>> for ValidityProof {
71    fn from(proof: &Option<CompressedProof>) -> Self {
72        Self(*proof)
73    }
74}
75
76#[allow(clippy::from_over_into)]
77impl Into<Option<CompressedProof>> for ValidityProof {
78    fn into(self) -> Option<CompressedProof> {
79        self.0
80    }
81}