cgp_component_macro_lib/derive_component/
entry.rs

1use alloc::collections::BTreeMap;
2use alloc::string::{String, ToString};
3
4use syn::parse::{Parse, ParseStream};
5use syn::punctuated::Punctuated;
6use syn::token::{Colon, Comma};
7use syn::{Ident, Type};
8
9pub struct Entry {
10    pub key: Ident,
11    pub value: Type,
12}
13
14impl Parse for Entry {
15    fn parse(input: ParseStream) -> syn::Result<Self> {
16        let key = input.parse()?;
17        let _colon: Colon = input.parse()?;
18        let value = input.parse()?;
19
20        Ok(Entry { key, value })
21    }
22}
23
24pub struct Entries {
25    pub entries: BTreeMap<String, Type>,
26}
27
28impl Parse for Entries {
29    fn parse(input: ParseStream) -> syn::Result<Self> {
30        let entry_list: Punctuated<Entry, Comma> = Punctuated::parse_terminated(input)?;
31
32        let entries = BTreeMap::from_iter(
33            entry_list
34                .into_iter()
35                .map(|entry| (entry.key.to_string(), entry.value)),
36        );
37
38        Ok(Entries { entries })
39    }
40}