use super::super::super::dispatch_bindings::*;
use std::{
cmp::*,
fmt::{self, Write},
hash::*,
};
impl ListResource {
pub fn into_list(self) -> List {
self.into_inner()
}
pub fn list(&self) -> &List {
self.get()
}
pub fn list_mut(&mut self) -> &mut List {
self.get_mut()
}
}
#[derive(Clone, Default, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub struct List {
pub inner: Vec<Expression>,
}
impl GuestListResource for List {
fn new(list: Vec<Expression>) -> Self {
Self::from(list)
}
fn inner(&self) -> Vec<Expression> {
self.clone().inner
}
fn length(&self) -> u64 {
self.inner.len() as u64
}
}
impl From<Vec<Expression>> for List {
fn from(inner: Vec<Expression>) -> Self {
Self { inner }
}
}
impl FromIterator<Expression> for List {
fn from_iter<IntoIteratorT>(iter: IntoIteratorT) -> Self
where
IntoIteratorT: IntoIterator<Item = Expression>,
{
Self::new(Vec::from_iter(iter))
}
}
impl fmt::Display for List {
fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
formatter.write_char('[')?;
let mut iterator = self.inner.iter().peekable();
while let Some(item) = iterator.next() {
fmt::Display::fmt(item, formatter)?;
if iterator.peek().is_some() {
formatter.write_char(',')?;
}
}
formatter.write_char(']')
}
}