solana_zk_sdk/zk_elgamal_proof_program/proof_data/
pod.rs1use {
2 crate::zk_elgamal_proof_program::proof_data::{errors::ProofDataError, ProofType},
3 bytemuck_derive::{Pod, Zeroable},
4 num_traits::{FromPrimitive, ToPrimitive},
5};
6
7#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Pod, Zeroable)]
8#[repr(transparent)]
9pub struct PodProofType(u8);
10impl From<ProofType> for PodProofType {
11 fn from(proof_type: ProofType) -> Self {
12 Self(ToPrimitive::to_u8(&proof_type).unwrap())
13 }
14}
15impl TryFrom<PodProofType> for ProofType {
16 type Error = ProofDataError;
17
18 fn try_from(pod: PodProofType) -> Result<Self, Self::Error> {
19 FromPrimitive::from_u8(pod.0).ok_or(Self::Error::InvalidProofType)
20 }
21}
22
23macro_rules! impl_wasm_to_bytes {
24 (TYPE = $type:ident) => {
25 #[cfg(not(target_os = "solana"))]
26 #[cfg_attr(target_arch = "wasm32", wasm_bindgen)]
27 impl $type {
28 #[cfg_attr(target_arch = "wasm32", wasm_bindgen(js_name = toBytes))]
29 pub fn to_bytes(&self) -> Box<[u8]> {
30 bytes_of(self).into()
31 }
32
33 #[cfg_attr(target_arch = "wasm32", wasm_bindgen(js_name = fromBytes))]
34 pub fn from_bytes(bytes: &[u8]) -> Result<Self, ProofDataError> {
35 bytemuck::try_from_bytes(bytes)
36 .copied()
37 .map_err(|_| ProofDataError::Deserialization)
38 }
39 }
40 };
41}
42pub(crate) use impl_wasm_to_bytes;