use super::{HookAccount, RecordKind};
use solana_program::program_error::ProgramError;
use static_assertions::const_assert_eq;
use steel::*;
#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
pub struct KycRecord {
pub user: Pubkey,
pub issuer_id: [u8; 16],
pub offering_id: [u8; 32],
pub offering_id_len: u8,
pub is_kyc_verified: u8,
pub record_kind: u8,
pub bump: u8,
pub _padding: [u8; 4],
}
const_assert_eq!(core::mem::size_of::<KycRecord>() % 8, 0);
account!(HookAccount, KycRecord);
impl KycRecord {
pub const VERIFIED: u8 = 1;
pub const NOT_VERIFIED: u8 = 0;
pub fn is_verified(&self) -> bool {
self.is_kyc_verified == Self::VERIFIED
}
pub fn record_kind_enum(&self) -> Result<RecordKind, ProgramError> {
RecordKind::try_from(self.record_kind).map_err(|_| ProgramError::InvalidAccountData)
}
pub fn issuer_id_matches(&self, expected: &[u8; 16]) -> bool {
&self.issuer_id == expected
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn offering_id_offset_for_extra_account_meta() {
let offset = core::mem::offset_of!(KycRecord, offering_id) as u8;
assert_eq!(offset, 48);
}
}