use serde::{Deserialize, Serialize};
use crate::SymbolKind;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Import {
pub module: String,
pub names: Vec<String>,
pub alias: Option<String>,
pub is_wildcard: bool,
pub is_relative: bool,
pub line: usize,
}
impl Import {
pub fn format_summary(&self) -> String {
if self.is_wildcard {
format!("{}::*", self.module)
} else if self.names.is_empty() {
self.module.clone()
} else if self.names.len() == 1 {
format!("{}::{}", self.module, self.names[0])
} else {
format!("{}::{{{}}}", self.module, self.names.join(", "))
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Export {
pub name: String,
pub kind: SymbolKind,
pub line: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FlatImport {
pub module: Option<String>,
pub name: String,
pub alias: Option<String>,
pub line: usize,
#[serde(default)]
pub is_reexport: bool,
}