rtic_syntax/parse/
resource.rs

1use proc_macro2::Span;
2use syn::{parse, Field, Visibility};
3
4use crate::parse::util::FilterAttrs;
5use crate::{
6    ast::{LocalResource, SharedResource, SharedResourceProperties},
7    parse::util,
8};
9
10impl SharedResource {
11    pub(crate) fn parse(item: &Field, span: Span) -> parse::Result<Self> {
12        if item.vis != Visibility::Inherited {
13            return Err(parse::Error::new(
14                span,
15                "this field must have inherited / private visibility",
16            ));
17        }
18
19        let FilterAttrs {
20            cfgs,
21            mut attrs,
22            docs,
23        } = util::filter_attributes(item.attrs.clone());
24
25        let lock_free = util::extract_lock_free(&mut attrs)?;
26
27        Ok(SharedResource {
28            cfgs,
29            attrs,
30            docs,
31            ty: Box::new(item.ty.clone()),
32            properties: SharedResourceProperties { lock_free },
33        })
34    }
35}
36
37impl LocalResource {
38    pub(crate) fn parse(item: &Field, span: Span) -> parse::Result<Self> {
39        if item.vis != Visibility::Inherited {
40            return Err(parse::Error::new(
41                span,
42                "this field must have inherited / private visibility",
43            ));
44        }
45
46        let FilterAttrs { cfgs, attrs, docs } = util::filter_attributes(item.attrs.clone());
47
48        Ok(LocalResource {
49            cfgs,
50            attrs,
51            docs,
52            ty: Box::new(item.ty.clone()),
53        })
54    }
55}