1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
use super::ToTokens; use std::fmt::{self, Display}; #[derive(Debug, Clone)] pub struct Tokens(String); impl Tokens { pub fn new() -> Self { Tokens(String::new()) } pub fn append(&mut self, token: &str) { self.0.push_str(token); self.0.push(' '); } pub fn append_all<T, I>(&mut self, iter: I) where T: ToTokens, I: IntoIterator<Item = T> { for token in iter { token.to_tokens(self); } } pub fn append_separated<T, I>(&mut self, iter: I, sep: &str) where T: ToTokens, I: IntoIterator<Item = T> { for (i, token) in iter.into_iter().enumerate() { if i > 0 { self.append(sep); } token.to_tokens(self); } } pub fn append_terminated<T, I>(&mut self, iter: I, term: &str) where T: ToTokens, I: IntoIterator<Item = T> { for token in iter { token.to_tokens(self); self.append(term); } } } impl Default for Tokens { fn default() -> Self { Tokens::new() } } impl Display for Tokens { fn fmt(&self, formatter: &mut fmt::Formatter) -> Result<(), fmt::Error> { self.0.fmt(formatter) } }