Skip to main content

floria_plugin_sdk/data/expression/
list.rs

1use super::super::super::dispatch_bindings::*;
2
3use std::{
4    cmp::*,
5    fmt::{self, Write},
6    hash::*,
7};
8
9impl ListResource {
10    /// Into list.
11    pub fn into_list(self) -> List {
12        self.into_inner()
13    }
14
15    /// Get list.
16    pub fn list(&self) -> &List {
17        self.get()
18    }
19
20    /// Get list.
21    pub fn list_mut(&mut self) -> &mut List {
22        self.get_mut()
23    }
24}
25
26//
27// List
28//
29
30/// List.
31#[derive(Clone, Default, Eq, Hash, Ord, PartialEq, PartialOrd)]
32pub struct List {
33    /// Inner.
34    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}