#[derive(Clone, Debug, rkyv::Archive, rkyv::Serialize, rkyv::Deserialize)]
#[rkyv(derive(Debug))]
pub struct SymbolFact {
pub file: String,
pub name: String,
pub kind: String,
pub line: u32,
}
#[derive(Clone, Debug, rkyv::Archive, rkyv::Serialize, rkyv::Deserialize)]
#[rkyv(derive(Debug))]
pub struct ImportFact {
pub from_file: String,
pub module_specifier: String,
pub name: String,
}
#[derive(Clone, Debug, rkyv::Archive, rkyv::Serialize, rkyv::Deserialize)]
#[rkyv(derive(Debug))]
pub struct CallFact {
pub caller_file: String,
pub caller_name: String,
pub callee_name: String,
pub line: u32,
}
#[derive(Clone, Debug, rkyv::Archive, rkyv::Serialize, rkyv::Deserialize)]
#[rkyv(derive(Debug))]
pub struct VisibilityFact {
pub file: String,
pub name: String,
pub visibility: String,
}
#[derive(Clone, Debug, rkyv::Archive, rkyv::Serialize, rkyv::Deserialize)]
#[rkyv(derive(Debug))]
pub struct AttributeFact {
pub file: String,
pub name: String,
pub attribute: String,
}
#[derive(Clone, Debug, rkyv::Archive, rkyv::Serialize, rkyv::Deserialize)]
#[rkyv(derive(Debug))]
pub struct ParentFact {
pub file: String,
pub child_name: String,
pub parent_name: String,
}
#[derive(Clone, Debug, rkyv::Archive, rkyv::Serialize, rkyv::Deserialize)]
#[rkyv(derive(Debug))]
pub struct QualifierFact {
pub caller_file: String,
pub caller_name: String,
pub callee_name: String,
pub qualifier: String,
}
#[derive(Clone, Debug, rkyv::Archive, rkyv::Serialize, rkyv::Deserialize)]
#[rkyv(derive(Debug))]
pub struct SymbolRangeFact {
pub file: String,
pub name: String,
pub start_line: u32,
pub end_line: u32,
}
#[derive(Clone, Debug, rkyv::Archive, rkyv::Serialize, rkyv::Deserialize)]
#[rkyv(derive(Debug))]
pub struct ImplementsFact {
pub file: String,
pub name: String,
pub interface: String,
}
#[derive(Clone, Debug, rkyv::Archive, rkyv::Serialize, rkyv::Deserialize)]
#[rkyv(derive(Debug))]
pub struct IsImplFact {
pub file: String,
pub name: String,
}
#[derive(Clone, Debug, rkyv::Archive, rkyv::Serialize, rkyv::Deserialize)]
#[rkyv(derive(Debug))]
pub struct TypeMethodFact {
pub file: String,
pub type_name: String,
pub method_name: String,
}
#[derive(Clone, Debug, Default, rkyv::Archive, rkyv::Serialize, rkyv::Deserialize)]
#[rkyv(derive(Debug))]
pub struct Relations {
pub symbols: Vec<SymbolFact>,
pub imports: Vec<ImportFact>,
pub calls: Vec<CallFact>,
pub visibilities: Vec<VisibilityFact>,
pub attributes: Vec<AttributeFact>,
pub parents: Vec<ParentFact>,
pub qualifiers: Vec<QualifierFact>,
pub symbol_ranges: Vec<SymbolRangeFact>,
pub implements: Vec<ImplementsFact>,
pub is_impls: Vec<IsImplFact>,
pub type_methods: Vec<TypeMethodFact>,
}
impl Relations {
pub fn new() -> Self {
Self::default()
}
pub fn add_symbol(&mut self, file: &str, name: &str, kind: &str, line: u32) {
self.symbols.push(SymbolFact {
file: file.into(),
name: name.into(),
kind: kind.into(),
line,
});
}
pub fn add_import(&mut self, from_file: &str, to_module: &str, name: &str) {
self.imports.push(ImportFact {
from_file: from_file.into(),
module_specifier: to_module.into(),
name: name.into(),
});
}
pub fn add_call(&mut self, caller_file: &str, caller_name: &str, callee_name: &str, line: u32) {
self.calls.push(CallFact {
caller_file: caller_file.into(),
caller_name: caller_name.into(),
callee_name: callee_name.into(),
line,
});
}
pub fn add_visibility(&mut self, file: &str, name: &str, visibility: &str) {
self.visibilities.push(VisibilityFact {
file: file.into(),
name: name.into(),
visibility: visibility.into(),
});
}
pub fn add_attribute(&mut self, file: &str, name: &str, attribute: &str) {
self.attributes.push(AttributeFact {
file: file.into(),
name: name.into(),
attribute: attribute.into(),
});
}
pub fn add_parent(&mut self, file: &str, child_name: &str, parent_name: &str) {
self.parents.push(ParentFact {
file: file.into(),
child_name: child_name.into(),
parent_name: parent_name.into(),
});
}
pub fn add_qualifier(
&mut self,
caller_file: &str,
caller_name: &str,
callee_name: &str,
qualifier: &str,
) {
self.qualifiers.push(QualifierFact {
caller_file: caller_file.into(),
caller_name: caller_name.into(),
callee_name: callee_name.into(),
qualifier: qualifier.into(),
});
}
pub fn add_symbol_range(&mut self, file: &str, name: &str, start_line: u32, end_line: u32) {
self.symbol_ranges.push(SymbolRangeFact {
file: file.into(),
name: name.into(),
start_line,
end_line,
});
}
pub fn add_implements(&mut self, file: &str, name: &str, interface: &str) {
self.implements.push(ImplementsFact {
file: file.into(),
name: name.into(),
interface: interface.into(),
});
}
pub fn add_is_impl(&mut self, file: &str, name: &str) {
self.is_impls.push(IsImplFact {
file: file.into(),
name: name.into(),
});
}
pub fn add_type_method(&mut self, file: &str, type_name: &str, method_name: &str) {
self.type_methods.push(TypeMethodFact {
file: file.into(),
type_name: type_name.into(),
method_name: method_name.into(),
});
}
}