use crate::primitives::{KeyHash, Slot};
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[serde(tag = "type", rename_all = "camelCase")]
pub enum NativeScript {
Sig {
#[serde(rename = "keyHash")]
key_hash: KeyHash,
},
All { scripts: Vec<NativeScript> },
Any { scripts: Vec<NativeScript> },
#[serde(rename_all = "camelCase")]
AtLeast {
required: u32,
scripts: Vec<NativeScript>,
},
After { slot: Slot },
Before { slot: Slot },
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum PlutusLanguage {
#[serde(rename = "plutusV1")]
V1,
#[serde(rename = "plutusV2")]
V2,
#[serde(rename = "plutusV3")]
V3,
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PlutusScript {
pub language: PlutusLanguage,
pub cbor_hex: String,
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[serde(tag = "kind", rename_all = "camelCase")]
pub enum Script {
Native { script: NativeScript },
Plutus { script: PlutusScript },
}
impl Script {
pub fn native(s: NativeScript) -> Self { Self::Native { script: s } }
pub fn plutus(language: PlutusLanguage, cbor_hex: impl Into<String>) -> Self {
Self::Plutus { script: PlutusScript { language, cbor_hex: cbor_hex.into() } }
}
}