rtic_macros/syntax/parse/
resource.rs

1use syn::{parse, Field};
2
3use crate::syntax::parse::util::FilterAttrs;
4use crate::syntax::{
5    ast::{LocalResource, SharedResource, SharedResourceProperties},
6    parse::util,
7};
8
9impl SharedResource {
10    pub(crate) fn parse(item: &Field) -> parse::Result<Self> {
11        let FilterAttrs {
12            cfgs,
13            mut attrs,
14            docs,
15        } = util::filter_attributes(item.attrs.clone());
16
17        let lock_free = util::extract_lock_free(&mut attrs)?;
18
19        Ok(SharedResource {
20            cfgs,
21            attrs,
22            docs,
23            ty: Box::new(item.ty.clone()),
24            properties: SharedResourceProperties { lock_free },
25            vis: item.vis.clone(),
26        })
27    }
28}
29
30impl LocalResource {
31    pub(crate) fn parse(item: &Field) -> parse::Result<Self> {
32        let FilterAttrs { cfgs, attrs, docs } = util::filter_attributes(item.attrs.clone());
33
34        Ok(LocalResource {
35            cfgs,
36            attrs,
37            docs,
38            ty: Box::new(item.ty.clone()),
39            vis: item.vis.clone(),
40        })
41    }
42}