rdc/targets/java/
cg_utils.rs

1use genco::prelude::*;
2use genco::quote;
3
4pub trait Compact<T> {
5    fn compact(&self) -> T;
6    fn join(&self, sep: &str) -> T;
7}
8
9impl Compact<java::Tokens> for Vec<java::Tokens> {
10    fn compact(&self) -> java::Tokens {
11        let iter = self.iter();
12        quote!($(for t in iter => $t))
13    }
14
15    fn join(&self, sep: &str) -> java::Tokens {
16        let iter = self.iter();
17        quote!($(for t in iter join ($sep) => $t))
18    }
19}
20
21#[macro_export]
22macro_rules! quote_iter {
23    ($val:expr => $t:expr) => {{
24        $val.map($t)
25            .collect::<Vec<genco::prelude::java::Tokens>>()
26            .compact()
27    }};
28
29    ($val:expr, join($sep:expr) => $t:expr) => {{
30        $val.map($t)
31            .collect::<Vec<genco::prelude::java::Tokens>>()
32            .join($sep)
33    }};
34}