mquote-impl 0.1.0

Quasi-quoting library aimed on better readability and usability
Documentation
use std::iter::FromIterator;

use proc_macro2::TokenTree;

use crate::language::*;

pub struct QTokens {
    tokens: Vec<TokenTreeQ>,
}

impl QTokens {
    pub fn new() -> Self {
        Self { tokens: vec![] }
    }
    pub fn push(&mut self, token: TokenTreeQ) {
        self.tokens.push(token);
    }
}

impl IntoIterator for QTokens {
    type Item = TokenTreeQ;
    type IntoIter = <Vec<TokenTreeQ> as IntoIterator>::IntoIter;

    fn into_iter(self) -> Self::IntoIter {
        self.tokens.into_iter()
    }
}

impl FromIterator<TokenTreeQ> for QTokens {
    fn from_iter<T: IntoIterator<Item=TokenTreeQ>>(iter: T) -> Self {
        Self {
            tokens: iter.into_iter().collect(),
        }
    }
}

impl FromIterator<TokenTree> for QTokens {
    fn from_iter<T: IntoIterator<Item=TokenTree>>(iter: T) -> Self {
        Self {
            tokens: iter.into_iter().map(TokenTreeQ::Plain).collect(),
        }
    }
}

impl From<Vec<TokenTreeQ>> for QTokens {
    fn from(tokens: Vec<TokenTreeQ>) -> Self {
        Self {
            tokens,
        }
    }
}