amaru_uplc/binder/
name.rs1use 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}