use serde::{Deserialize, Serialize};
use super::confidence::Confidence;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Edge {
pub source: String,
pub target: ResolvedTarget,
pub relation: String,
pub confidence: Confidence,
pub location: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(tag = "type", rename_all = "snake_case")]
pub enum ResolvedTarget {
Resolved { id: String },
Unresolved { raw: String, reason: String },
}
impl ResolvedTarget {
pub fn resolved(id: impl Into<String>) -> Self {
Self::Resolved { id: id.into() }
}
pub fn unresolved(raw: impl Into<String>, reason: impl Into<String>) -> Self {
Self::Unresolved {
raw: raw.into(),
reason: reason.into(),
}
}
pub fn id(&self) -> Option<&str> {
match self {
Self::Resolved { id } => Some(id),
Self::Unresolved { .. } => None,
}
}
}
#[derive(Debug, Clone)]
pub struct RawEdge {
pub target_path: String,
pub relation: String,
pub confidence: Confidence,
pub location: String,
}