chainfuzz 0.2.0

A library for fuzzing UTxO blockchain data structures
Documentation
use crate::{AssetClass, AssetPolicy};

pub enum KnownAsset {
    Hosky,
    Snek,
    NikePig,
    Custom(&'static str, &'static str),
}

impl KnownAsset {
    pub fn policy_hex(&self) -> &str {
        match self {
            KnownAsset::Hosky => "a0028f350aaabe0545fdcb56b039bfb08e4bb4d8c4d7c3c7d481c235",
            KnownAsset::Snek => "279c909f348e533da5808898f87f9a14bb2c3dfbbacccd631d927a3f",
            KnownAsset::NikePig => "c881c20e49dbaca3ff6cef365969354150983230c39520b917f5cf7c",
            KnownAsset::Custom(policy, _) => policy,
        }
    }

    pub fn ticker(&self) -> &str {
        match self {
            KnownAsset::Hosky => "HOSKY",
            KnownAsset::Snek => "SNEK",
            KnownAsset::NikePig => "NIKEPIG",
            KnownAsset::Custom(_, name) => name,
        }
    }

    pub fn name(&self) -> &[u8] {
        self.ticker().as_bytes()
    }

    pub fn policy(&self) -> AssetPolicy {
        let decoded = hex::decode(self.policy_hex()).unwrap();
        decoded.try_into().unwrap()
    }
}

impl From<KnownAsset> for AssetClass {
    fn from(asset: KnownAsset) -> Self {
        Self {
            policy: asset.policy(),
            name: asset.name().to_vec(),
        }
    }
}