floria_plugin_sdk/data/expression/
list.rs1use super::super::super::dispatch_bindings::*;
2
3use std::{
4 cmp::*,
5 fmt::{self, Write},
6 hash::*,
7};
8
9impl ListResource {
10 pub fn into_list(self) -> List {
12 self.into_inner()
13 }
14
15 pub fn list(&self) -> &List {
17 self.get()
18 }
19
20 pub fn list_mut(&mut self) -> &mut List {
22 self.get_mut()
23 }
24}
25
26#[derive(Clone, Default, Eq, Hash, Ord, PartialEq, PartialOrd)]
32pub struct List {
33 pub inner: Vec<Expression>,
35}
36
37impl GuestListResource for List {
38 fn new(list: Vec<Expression>) -> Self {
39 Self::from(list)
40 }
41
42 fn inner(&self) -> Vec<Expression> {
43 self.clone().inner
44 }
45
46 fn length(&self) -> u64 {
47 self.inner.len() as u64
48 }
49}
50
51impl From<Vec<Expression>> for List {
52 fn from(inner: Vec<Expression>) -> Self {
53 Self { inner }
54 }
55}
56
57impl FromIterator<Expression> for List {
58 fn from_iter<IntoIteratorT>(iter: IntoIteratorT) -> Self
59 where
60 IntoIteratorT: IntoIterator<Item = Expression>,
61 {
62 Self::new(Vec::from_iter(iter))
63 }
64}
65
66impl fmt::Display for List {
67 fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
68 formatter.write_char('[')?;
69
70 let mut iterator = self.inner.iter().peekable();
71 while let Some(item) = iterator.next() {
72 fmt::Display::fmt(item, formatter)?;
73 if iterator.peek().is_some() {
74 formatter.write_char(',')?;
75 }
76 }
77
78 formatter.write_char(']')
79 }
80}