light_compressed_account/instruction_data/
compressed_proof.rs1use 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}