bevy_macro_utils/
attrs.rs

1use syn::{Expr, ExprLit, Lit};
2
3use crate::symbol::Symbol;
4
5/// Get a [literal string](struct@syn::LitStr) from the provided [expression](Expr).
6pub fn get_lit_str(attr_name: Symbol, value: &Expr) -> syn::Result<&syn::LitStr> {
7    if let Expr::Lit(ExprLit {
8        lit: Lit::Str(lit), ..
9    }) = &value
10    {
11        Ok(lit)
12    } else {
13        Err(syn::Error::new_spanned(
14            value,
15            format!("expected {attr_name} attribute to be a string: `{attr_name} = \"...\"`"),
16        ))
17    }
18}
19
20/// Get a [literal boolean](struct@syn::LitBool) from the provided [expression](Expr) as a [`bool`].
21pub fn get_lit_bool(attr_name: Symbol, value: &Expr) -> syn::Result<bool> {
22    if let Expr::Lit(ExprLit {
23        lit: Lit::Bool(lit),
24        ..
25    }) = &value
26    {
27        Ok(lit.value())
28    } else {
29        Err(syn::Error::new_spanned(
30            value,
31            format!("expected {attr_name} attribute to be a bool value, `true` or `false`: `{attr_name} = ...`"),
32        ))?
33    }
34}