component-shape-gpui-macros 0.3.2

Proc macros for component-shape-gpui.
Documentation
use proc_macro_crate::{FoundCrate, crate_name};
use syn::Path;

#[derive(Clone)]
pub struct CratePaths {
    pub component_shape: Path,
    pub component_shape_gpui: Path,
    pub gpui: Path,
}

impl CratePaths {
    pub fn resolve() -> Self {
        let component_shape_gpui =
            resolve_crate_path("component-shape-gpui", "::component_shape_gpui");
        Self {
            component_shape: component_shape_gpui.clone(),
            component_shape_gpui,
            gpui: resolve_crate_path("gpui-kit", "::gpui_kit"),
        }
    }
}

pub fn resolve_crate_path(package_name: &str, fallback: &str) -> Path {
    let path = match crate_name(package_name) {
        Ok(FoundCrate::Itself) => "crate".to_string(),
        Ok(FoundCrate::Name(name)) => format!("::{name}"),
        Err(_) => fallback.to_string(),
    };

    syn::parse_str(&path).expect("crate path resolver produced a valid Rust path")
}