bevy/crates/bevy_reflect/bevy_reflect_derive/src/modules.rs
Carter Anderson 72b2fc9843
Bevy Reflection (#926)
Bevy Reflection
2020-11-27 16:39:59 -08:00

46 lines
1.1 KiB
Rust

use find_crate::Manifest;
use proc_macro::TokenStream;
use syn::Path;
#[derive(Debug)]
pub struct Modules {
pub bevy_reflect: String,
}
impl Modules {
pub fn meta(name: &str) -> Modules {
Modules {
bevy_reflect: format!("{}::reflect", name),
}
}
pub fn external() -> Modules {
Modules {
bevy_reflect: "bevy_reflect".to_string(),
}
}
pub fn internal() -> Modules {
Modules {
bevy_reflect: "crate".to_string(),
}
}
}
pub fn get_modules() -> Modules {
let manifest = Manifest::new().unwrap();
if let Some(package) = manifest.find(|name| name == "bevy") {
Modules::meta(&package.name)
} else if let Some(package) = manifest.find(|name| name == "bevy_internal") {
Modules::meta(&package.name)
} else if let Some(_package) = manifest.find(|name| name == "bevy_reflect") {
Modules::external()
} else {
Modules::internal()
}
}
pub fn get_path(path_str: &str) -> Path {
syn::parse(path_str.parse::<TokenStream>().unwrap()).unwrap()
}