postcard-bindgen-core 0.3.5

A crate to generate bindings for the postcard binary format for other languages than Rust - Core Crate
Documentation
use genco::{prelude::js::Tokens, quote};

pub fn semicolon_chain(parts: impl IntoIterator<Item = Tokens>) -> Tokens {
    quote!($(for part in parts join (; ) => $part))
}

pub fn comma_chain(parts: impl IntoIterator<Item = Tokens>) -> Tokens {
    quote!($(for part in parts join (, ) => $part))
}

pub fn line_break_chain(parts: impl IntoIterator<Item = Tokens>) -> Tokens {
    quote!($(for part in parts join ($['\n']) => $part))
}

#[allow(unused)]
pub fn joined_chain(parts: impl IntoIterator<Item = Tokens>) -> Tokens {
    parts.into_iter().fold(Tokens::new(), |mut res, p| {
        res.append(p);
        res
    })
}

pub fn and_chain(parts: impl IntoIterator<Item = Tokens>) -> Tokens {
    quote!($(for part in parts join ( && ) => $part))
}

pub fn or_chain(parts: impl IntoIterator<Item = Tokens>) -> Tokens {
    quote!($(for part in parts join ( || ) => $part))
}

pub fn colon_chain(parts: impl IntoIterator<Item = Tokens>) -> Tokens {
    quote!($(for part in parts join ( : ) => $part))
}

pub fn divider_chain(parts: impl IntoIterator<Item = Tokens>) -> Tokens {
    quote!($(for part in parts join ( | ) => $part))
}

pub fn wrapped_brackets(inner: Tokens) -> Tokens {
    quote!(($inner))
}

pub fn wrapped_curly_brackets(inner: Tokens) -> Tokens {
    quote!({ $inner })
}

#[cfg(test)]
mod test {
    use genco::quote;

    use super::{and_chain, or_chain};

    #[test]
    fn test_and_chain() {
        let parts = vec![quote!(true === true), quote!(false === false)];
        assert_eq!(
            and_chain(parts).to_string().unwrap(),
            "true === true && false === false"
        )
    }

    #[test]
    fn test_or_chain() {
        let parts = vec![quote!(true === true), quote!(false === false)];
        assert_eq!(
            or_chain(parts).to_string().unwrap(),
            "true === true || false === false"
        )
    }
}