cardano_serialization_lib/protocol_types/plutus/
language.rs

1use crate::*;
2
3#[wasm_bindgen]
4#[derive(
5    Clone,
6    Copy,
7    Debug,
8    Hash,
9    Eq,
10    Ord,
11    PartialEq,
12    PartialOrd,
13    serde::Serialize,
14    serde::Deserialize,
15    JsonSchema,
16)]
17pub enum LanguageKind {
18    PlutusV1 = 0,
19    PlutusV2 = 1,
20    PlutusV3 = 2,
21}
22
23impl LanguageKind {
24    pub(crate) fn from_u64(x: u64) -> Option<LanguageKind> {
25        match x {
26            0 => Some(LanguageKind::PlutusV1),
27            1 => Some(LanguageKind::PlutusV2),
28            2 => Some(LanguageKind::PlutusV3),
29            _ => None,
30        }
31    }
32}
33
34#[wasm_bindgen]
35#[derive(
36    Clone,
37    Copy,
38    Debug,
39    Hash,
40    Eq,
41    Ord,
42    PartialEq,
43    PartialOrd,
44    serde::Serialize,
45    serde::Deserialize,
46    JsonSchema,
47)]
48pub struct Language(pub(crate) LanguageKind);
49
50impl_to_from!(Language);
51
52#[wasm_bindgen]
53impl Language {
54    pub fn new_plutus_v1() -> Self {
55        Self(LanguageKind::PlutusV1)
56    }
57
58    pub fn new_plutus_v2() -> Self {
59        Self(LanguageKind::PlutusV2)
60    }
61
62    pub fn new_plutus_v3() -> Self {
63        Self(LanguageKind::PlutusV3)
64    }
65
66    pub fn kind(&self) -> LanguageKind {
67        self.0.clone()
68    }
69}