cardano_serialization_lib/builders/script_structs/
plutus_script_source.rs1use crate::*;
2
3#[derive(Clone, Debug, Eq, Ord, PartialEq, PartialOrd)]
4pub(crate) enum PlutusScriptSourceEnum {
5 Script(PlutusScript, Option<RequiredSigners>),
6 RefInput(PlutusScriptRef, Option<RequiredSigners>),
7}
8
9impl PlutusScriptSourceEnum {
10 pub fn script_hash(&self) -> ScriptHash {
11 match self {
12 PlutusScriptSourceEnum::Script(script, ..) => script.hash(),
13 PlutusScriptSourceEnum::RefInput(script_ref, ..) => script_ref.script_hash.clone()
14 }
15 }
16
17 pub fn language(&self) -> Language {
18 match self {
19 PlutusScriptSourceEnum::Script(script, ..) => script.language_version(),
20 PlutusScriptSourceEnum::RefInput(script_ref, ..) => script_ref.language.clone(),
21 }
22 }
23
24 pub(crate) fn get_required_signers(&self) -> Option<Ed25519KeyHashes> {
25 match self {
26 PlutusScriptSourceEnum::Script(_, signers) => signers.clone(),
27 PlutusScriptSourceEnum::RefInput(_, signers) => signers.clone(),
28 }
29 }
30}
31
32#[wasm_bindgen]
33#[derive(Clone, Debug, Eq, Ord, PartialEq, PartialOrd)]
34pub struct PlutusScriptSource(pub(crate) PlutusScriptSourceEnum);
35
36#[wasm_bindgen]
37impl PlutusScriptSource {
38 pub fn new(script: &PlutusScript) -> Self {
39 Self(PlutusScriptSourceEnum::Script(script.clone(), None))
40 }
41 pub fn new_ref_input(
42 script_hash: &ScriptHash,
43 input: &TransactionInput,
44 lang_ver: &Language,
45 script_size: usize,
46 ) -> Self {
47 Self(PlutusScriptSourceEnum::RefInput(
48 PlutusScriptRef::new(
49 input.clone(),
50 script_hash.clone(),
51 lang_ver.clone(),
52 script_size,
53 ),
54 None,
55 ))
56 }
57
58 pub fn set_required_signers(&mut self, key_hashes: &Ed25519KeyHashes) {
59 match &mut self.0 {
60 PlutusScriptSourceEnum::Script(_, signers) => {
61 *signers = Some(key_hashes.clone());
62 }
63 PlutusScriptSourceEnum::RefInput(_ , signers) => {
64 *signers = Some(key_hashes.clone());
65 }
66 }
67 }
68
69 pub fn get_ref_script_size(&self) -> Option<usize> {
70 match &self.0 {
71 PlutusScriptSourceEnum::Script(..) => None,
72 PlutusScriptSourceEnum::RefInput(script_ref, ..) => Some(script_ref.script_size)
73 }
74 }
75}