ambient_package_semantic 0.3.1

Semantic analysis for the Ambient package manifests
Documentation
use ambient_package::ItemPathBuf;

use crate::{Item, ItemData, ItemId, ItemType, ItemValue, Resolve, Semantic};

#[derive(Clone, PartialEq, Debug)]
pub struct Attribute {
    pub data: ItemData,
}
impl Item for Attribute {
    const TYPE: ItemType = ItemType::Attribute;
    type Unresolved = ItemPathBuf;

    fn from_item_value(value: &ItemValue) -> Option<&Self> {
        match value {
            ItemValue::Attribute(value) => Some(value),
            _ => None,
        }
    }

    fn from_item_value_mut(value: &mut ItemValue) -> Option<&mut Self> {
        match value {
            ItemValue::Attribute(value) => Some(value),
            _ => None,
        }
    }

    fn into_item_value(self) -> ItemValue {
        ItemValue::Attribute(self)
    }

    fn data(&self) -> &ItemData {
        &self.data
    }
}
impl Resolve for Attribute {
    fn resolve(self, _semantic: &mut Semantic, _self_id: ItemId<Self>) -> anyhow::Result<Self> {
        Ok(self)
    }

    fn already_resolved(&self) -> bool {
        true
    }
}