Path: blob/main/crates/bevy_scene/macros/src/bsn/mod.rs
30638 views
pub mod codegen;1pub mod parse;2pub mod types;34use codegen::*;5use types::*;67use bevy_macro_utils::BevyManifest;8use proc_macro::{Span, TokenStream};9use syn::{parse_macro_input, parse_quote};1011pub fn bsn(input: TokenStream) -> TokenStream {12bsn_token_stream::<BsnRoot>(input)13}1415pub fn bsn_list(input: TokenStream) -> TokenStream {16bsn_token_stream::<BsnListRoot>(input)17}1819fn bsn_token_stream<T: BsnTokenStream>(input: TokenStream) -> TokenStream {20let scene = parse_macro_input!(input as T);2122let (bevy_scene, bevy_ecs) = BevyManifest::shared(|manifest| {23(24manifest.get_path("bevy_scene"),25manifest.get_path("bevy_ecs"),26)27});28let mut entity_refs = EntityRefs::default();29let mut hoisted_expressions = HoistedExpressions::default();30let call_site = Span::call_site();31let file = call_site.file();32let line = call_site.line();33let column = call_site.column();34let mut ctx = BsnCodegenCtx {35bevy_scene: &bevy_scene,36bevy_ecs: &bevy_ecs,37entity_refs: &mut entity_refs,38invocation_index: parse_quote!((#file, #line, #column)),39hoisted_expressions: &mut hoisted_expressions,40errors: Vec::new(),41};4243TokenStream::from(scene.to_tokens(&mut ctx))44}454647