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