use serde::{Deserialize, Serialize};
use crate::edge::Relation;
use crate::node::{NodeId, Span};
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
pub struct Reference {
pub file: String,
pub name: String,
pub path: Option<String>,
pub relation: Relation,
pub span: Span,
pub enclosing: Option<NodeId>,
pub alias: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
pub struct LocalBinding {
pub file: String,
pub name: String,
pub span: Span,
pub scope_end: u64,
pub type_name: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
pub struct FieldBinding {
pub owner: NodeId,
pub name: String,
pub type_name: String,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum UnresolvedReason {
SyntaxAnchoredMiss,
SyntaxOnly,
CompilerUnresolved,
}
impl UnresolvedReason {
pub const fn as_str(self) -> &'static str {
match self {
Self::SyntaxAnchoredMiss => "syntax_anchored_miss",
Self::SyntaxOnly => "syntax_only",
Self::CompilerUnresolved => "compiler_unresolved",
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
pub struct UnresolvedReference {
pub reference: Reference,
pub reason: UnresolvedReason,
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
pub struct Embed {
pub owner: NodeId,
pub type_name: String,
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
pub struct TraitImpl {
pub file: String,
pub trait_name: String,
pub span: Span,
}