swift_bridge_ir/
bridge_macro_attributes.rs1use proc_macro2::Ident;
2use syn::parse::{Parse, ParseStream};
3use syn::{Path, Token};
4
5pub struct SwiftBridgeModuleAttrs {
8 #[allow(missing_docs)]
9 pub attributes: Vec<SwiftBridgeModuleAttr>,
10}
11
12pub enum SwiftBridgeModuleAttr {
14 SwiftBridgePath(Path),
18}
19
20impl Parse for SwiftBridgeModuleAttrs {
21 fn parse(input: ParseStream) -> syn::Result<Self> {
22 if input.is_empty() {
23 return Ok(SwiftBridgeModuleAttrs { attributes: vec![] });
24 }
25
26 let opts = syn::punctuated::Punctuated::<_, Token![,]>::parse_terminated(input)?;
27
28 Ok(SwiftBridgeModuleAttrs {
29 attributes: opts.into_iter().collect(),
30 })
31 }
32}
33
34impl Parse for SwiftBridgeModuleAttr {
35 fn parse(input: ParseStream) -> syn::Result<Self> {
36 let key: Ident = input.parse()?;
37 let _equals = input.parse::<Token![=]>()?;
38
39 let attr = match key.to_string().as_str() {
40 "swift_bridge_path" => SwiftBridgeModuleAttr::SwiftBridgePath(input.parse()?),
41 _ => {
42 return Err(syn::Error::new(input.span(), "Unknown attribute."));
43 }
44 };
45
46 Ok(attr)
47 }
48}