mod introspect;
mod laid_out;
mod shown;
pub use introspect::*;
pub use laid_out::*;
pub use shown::*;
use crate::store::instances::resolve_instance;
use amethystate_core::path::StorePath;
use dashmap::DashMap;
use std::sync::{Arc, LazyLock};
use uuid::Uuid;
pub use crate::store::instances::short_type_name;
#[derive(Debug, Clone)]
pub struct FieldMeta {
pub struct_type_name: &'static str,
pub field_name: Arc<str>,
pub value_type_name: &'static str,
}
static FIELDS: LazyLock<DashMap<StorePath, FieldMeta>> = LazyLock::new(DashMap::new);
pub fn register_field<T: 'static>(path: &StorePath, instance_id: Uuid) {
let struct_type_name = match resolve_instance(instance_id) {
Some(n) => n,
None => return,
};
let field_name: Arc<str> = match path.name() {
Some(name) => Arc::from(name.as_str()),
None => return,
};
FIELDS.entry(path.clone()).or_insert(FieldMeta {
struct_type_name,
field_name,
value_type_name: std::any::type_name::<T>(),
});
}
pub fn resolve_field(path: &StorePath) -> Option<FieldMeta> {
FIELDS.get(path).map(|found| found.clone())
}