use std::sync::Arc;
use pedant_types::SymbolKind;
use crate::ir::facts::TypeDefKind;
use crate::ir::sites::IrRange;
pub(in crate::ir::extract) struct TypeDefinition<'ast> {
pub(in crate::ir::extract) ident: &'ast syn::Ident,
pub(in crate::ir::extract) name: Arc<str>,
pub(in crate::ir::extract) kind: TypeDefKind,
pub(in crate::ir::extract) visibility: &'ast syn::Visibility,
pub(in crate::ir::extract) attrs: &'ast [syn::Attribute],
pub(in crate::ir::extract) declaration: IrRange,
}
impl<'ast> TypeDefinition<'ast> {
pub(in crate::ir::extract) fn declared_item(&self) -> ValueItem<'ast> {
ValueItem {
ident: self.ident,
kind: symbol_kind(self.kind),
attrs: self.attrs,
associated_with: None,
declaration: self.declaration,
}
}
}
pub(in crate::ir::extract) struct ValueItem<'ast> {
pub(in crate::ir::extract) ident: &'ast syn::Ident,
pub(in crate::ir::extract) kind: SymbolKind,
pub(in crate::ir::extract) attrs: &'ast [syn::Attribute],
pub(in crate::ir::extract) associated_with: Option<Arc<str>>,
pub(in crate::ir::extract) declaration: IrRange,
}
fn symbol_kind(kind: TypeDefKind) -> SymbolKind {
match kind {
TypeDefKind::Struct => SymbolKind::Struct,
TypeDefKind::Enum => SymbolKind::Enum,
TypeDefKind::Trait => SymbolKind::Trait,
TypeDefKind::Union => SymbolKind::Union,
}
}