use serde::{Deserialize, Serialize};
pub use crate::extract::SCHEMA_VER;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct ResolvedEdge {
pub use_start: u32,
pub use_end: u32,
pub def_start: u32,
pub def_end: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct ImportEdge {
pub local: String,
pub specifier: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub imported: Option<String>,
#[serde(default)]
pub is_type: bool,
pub local_start: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct ExportEdge {
pub name: String,
pub name_start: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct FileResolvedRefs {
pub schema_ver: u16,
pub language: String,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub intra: Vec<ResolvedEdge>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub imports: Vec<ImportEdge>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub exports: Vec<ExportEdge>,
}
impl FileResolvedRefs {
pub fn new(language: impl Into<String>) -> Self {
Self {
schema_ver: SCHEMA_VER,
language: language.into(),
intra: Vec::new(),
imports: Vec::new(),
exports: Vec::new(),
}
}
pub fn is_empty(&self) -> bool {
self.intra.is_empty() && self.imports.is_empty() && self.exports.is_empty()
}
}