hiero-sdk 0.44.1

The SDK for interacting with Hedera Hashgraph.
Documentation
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[repr(u32)]
pub enum HookType {
    PreHook = 0,
    PrePostHook = 1,
    PreHookSender = 2,
    PrePostHookSender = 3,
    PreHookReceiver = 4,
    PrePostHookReceiver = 5,
}

impl HookType {
    pub const fn value(self) -> u32 {
        self as u32
    }

    pub const fn from_value(value: u32) -> Option<Self> {
        match value {
            0 => Some(Self::PreHook),
            1 => Some(Self::PrePostHook),
            2 => Some(Self::PreHookSender),
            3 => Some(Self::PrePostHookSender),
            4 => Some(Self::PreHookReceiver),
            5 => Some(Self::PrePostHookReceiver),
            _ => None,
        }
    }
}

impl From<HookType> for u32 {
    fn from(hook_type: HookType) -> Self {
        hook_type.value()
    }
}

impl TryFrom<u32> for HookType {
    type Error = ();

    fn try_from(value: u32) -> Result<Self, Self::Error> {
        Self::from_value(value).ok_or(())
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_hook_type_values() {
        assert_eq!(HookType::PreHook.value(), 0);
        assert_eq!(HookType::PrePostHook.value(), 1);
        assert_eq!(HookType::PreHookSender.value(), 2);
        assert_eq!(HookType::PrePostHookSender.value(), 3);
        assert_eq!(HookType::PreHookReceiver.value(), 4);
        assert_eq!(HookType::PrePostHookReceiver.value(), 5);
    }

    #[test]
    fn test_hook_type_from_value() {
        assert_eq!(HookType::from_value(0), Some(HookType::PreHook));
        assert_eq!(HookType::from_value(1), Some(HookType::PrePostHook));
        assert_eq!(HookType::from_value(2), Some(HookType::PreHookSender));
        assert_eq!(HookType::from_value(3), Some(HookType::PrePostHookSender));
        assert_eq!(HookType::from_value(4), Some(HookType::PreHookReceiver));
        assert_eq!(HookType::from_value(5), Some(HookType::PrePostHookReceiver));
        assert_eq!(HookType::from_value(6), None);
    }

    #[test]
    fn test_hook_type_conversions() {
        let hook_type = HookType::PrePostHook;
        let value: u32 = hook_type.into();
        assert_eq!(value, 1);

        let hook_type_from_value = HookType::try_from(1).unwrap();
        assert_eq!(hook_type_from_value, HookType::PrePostHook);

        assert!(HookType::try_from(999).is_err());
    }
}