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}