1use std::fmt;
2
3#[derive(Debug, Clone, PartialEq)]
4pub struct Atom {
5 data: u64,
6}
7
8impl From<u64> for Atom {
9 fn from(v: u64) -> Self {
10 Self { data: v }
11 }
12}
13
14impl fmt::Display for Atom {
15 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
16 writeln!(f, "{{");
17 writeln!(f, " '_1': {},", self.data);
18 writeln!(f, "}}");
19 Ok(())
20 }
21}
22
23#[derive(Debug, Clone, PartialEq)]
24pub struct Array {
25 data: Vec<Atom>,
26}
27
28impl From<&[u64]> for Array {
29 fn from(v: &[u64]) -> Self {
30 Self {
31 data: v.to_vec().into_iter().map(Atom::from).collect::<Vec<_>>(),
32 }
33 }
34}
35
36impl fmt::Display for Array {
37 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
38 writeln!(f, "<<");
39 for atom in self.data.iter() {
40 writeln!(f, " {},", atom);
41 }
42 writeln!(f, ">>");
43 Ok(())
44 }
45}