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}