use steel::*;
#[repr(C)]
#[derive(Debug, Clone, Copy, Pod, Zeroable)]
pub struct SocialClaimData {
pub post_url: [u8; 256],
pub oracle_signature: [u8; 64],
pub post_timestamp: [u8; 8],
pub engagement_score: [u8; 4],
pub _padding: [u8; 4],
}
impl SocialClaimData {
pub fn from_bytes(data: &[u8]) -> Result<Self, &'static str> {
let expected_size = std::mem::size_of::<Self>();
if data.len() < expected_size {
return Err("Insufficient data for SocialClaimData");
}
let post_url: [u8; 256] = data[0..256].try_into().map_err(|_| "Invalid post_url")?;
let oracle_signature: [u8; 64] = data[256..320]
.try_into()
.map_err(|_| "Invalid oracle_signature")?;
let post_timestamp: [u8; 8] = data[320..328]
.try_into()
.map_err(|_| "Invalid post_timestamp")?;
let engagement_score: [u8; 4] = data[328..332]
.try_into()
.map_err(|_| "Invalid engagement_score")?;
let _padding: [u8; 4] = data[332..336].try_into().map_err(|_| "Invalid padding")?;
Ok(Self {
post_url,
oracle_signature,
engagement_score,
post_timestamp,
_padding,
})
}
}