abi_stable_derive/
literals_constructors.rs

1//! This module contains helper types/functions to output
2//! the literals and constructors for types that don't implement ToTokens.
3
4use as_derive_utils::to_token_fn::ToTokenFnMut;
5
6use quote::{quote, ToTokens, TokenStreamExt};
7
8/// Constructs an RSlice constant.
9pub fn rslice_tokenizer<'a, I, T>(iter: I) -> impl ToTokens + 'a
10where
11    I: IntoIterator<Item = T> + 'a,
12    T: ToTokens,
13{
14    let mut iter = iter.into_iter();
15    ToTokenFnMut::new(move |ts| {
16        let iter = &mut iter;
17        ts.append_all(quote!(
18            abi_stable::std_types::RSlice::from_slice(&[ #( #iter, )* ])
19        ));
20    })
21}
22
23/// Constructs an RStr constant.
24pub fn rstr_tokenizer<S>(string: S) -> impl ToTokens
25where
26    S: AsRef<str>,
27{
28    ToTokenFnMut::new(move |ts| {
29        let string = string.as_ref();
30
31        ts.append_all(quote!( abi_stable::std_types::RStr::from_str(#string) ));
32    })
33}