Skip to main content

amaru_uplc/binder/
name.rs

1use crate::arena::Arena;
2
3use super::Binder;
4
5#[derive(Debug)]
6pub struct Name<'a> {
7    text: &'a str,
8    unique: usize,
9}
10
11impl<'a> Name<'a> {
12    pub fn new(arena: &'a Arena, text: &'a str, unique: usize) -> &'a Self {
13        arena.alloc(Name { text, unique })
14    }
15}
16
17impl<'a> Binder<'a> for Name<'a> {
18    fn var_encode(&self, e: &mut crate::flat::Encoder) -> Result<(), crate::flat::FlatEncodeError> {
19        e.utf8(self.text)?;
20        e.word(self.unique);
21
22        Ok(())
23    }
24
25    fn var_decode(
26        arena: &'a Arena,
27        d: &mut crate::flat::Decoder,
28    ) -> Result<&'a Self, crate::flat::FlatDecodeError> {
29        let text = d.utf8(arena)?;
30        let index = d.word()?;
31
32        let nd = Name::new(arena, text, index);
33
34        Ok(nd)
35    }
36
37    fn parameter_encode(
38        &self,
39        e: &mut crate::flat::Encoder,
40    ) -> Result<(), crate::flat::FlatEncodeError> {
41        self.var_encode(e)
42    }
43
44    fn parameter_decode(
45        arena: &'a Arena,
46        d: &mut crate::flat::Decoder,
47    ) -> Result<&'a Self, crate::flat::FlatDecodeError> {
48        Self::var_decode(arena, d)
49    }
50}