Skip to main content

amaru_uplc/
typ.rs

1use crate::arena::Arena;
2
3#[derive(Debug, PartialEq)]
4pub enum Type<'a> {
5    Bool,
6    Integer,
7    String,
8    ByteString,
9    Unit,
10    List(&'a Type<'a>),
11    Array(&'a Type<'a>),
12    Pair(&'a Type<'a>, &'a Type<'a>),
13    Data,
14    Bls12_381G1Element,
15    Bls12_381G2Element,
16    Bls12_381MlResult,
17}
18
19impl<'a> Type<'a> {
20    pub fn integer(arena: &'a Arena) -> &'a Type<'a> {
21        arena.alloc(Type::Integer)
22    }
23
24    pub fn bool(arena: &'a Arena) -> &'a Type<'a> {
25        arena.alloc(Type::Bool)
26    }
27
28    pub fn string(arena: &'a Arena) -> &'a Type<'a> {
29        arena.alloc(Type::String)
30    }
31
32    pub fn byte_string(arena: &'a Arena) -> &'a Type<'a> {
33        arena.alloc(Type::ByteString)
34    }
35
36    pub fn unit(arena: &'a Arena) -> &'a Type<'a> {
37        arena.alloc(Type::Unit)
38    }
39
40    pub fn data(arena: &'a Arena) -> &'a Type<'a> {
41        arena.alloc(Type::Data)
42    }
43
44    pub fn list(arena: &'a Arena, inner: &'a Type<'a>) -> &'a Type<'a> {
45        arena.alloc(Type::List(inner))
46    }
47
48    pub fn array(arena: &'a Arena, inner: &'a Type<'a>) -> &'a Type<'a> {
49        arena.alloc(Type::Array(inner))
50    }
51
52    pub fn pair(arena: &'a Arena, fst: &'a Type<'a>, snd: &'a Type<'a>) -> &'a Type<'a> {
53        arena.alloc(Type::Pair(fst, snd))
54    }
55
56    pub fn g1(arena: &'a Arena) -> &'a Type<'a> {
57        arena.alloc(Type::Bls12_381G1Element)
58    }
59
60    pub fn g2(arena: &'a Arena) -> &'a Type<'a> {
61        arena.alloc(Type::Bls12_381G2Element)
62    }
63
64    pub fn ml_result(arena: &'a Arena) -> &'a Type<'a> {
65        arena.alloc(Type::Bls12_381MlResult)
66    }
67}