use std::collections::{HashMap, HashSet};
use panproto_schema::Edge;
use crate::fan::Fan;
use crate::metadata::Node;
use crate::value::{FieldPresence, Value};
#[derive(Clone, Debug, Default, serde::Serialize, serde::Deserialize)]
pub struct Complement {
pub dropped_nodes: HashMap<u32, Node>,
pub dropped_arcs: Vec<(u32, u32, Edge)>,
pub dropped_fans: Vec<Fan>,
pub contraction_choices: HashMap<(u32, u32), Edge>,
pub original_parent: HashMap<u32, u32>,
#[serde(default)]
pub source_fingerprint: u64,
#[serde(default, skip_serializing_if = "HashMap::is_empty")]
pub original_extra_fields: HashMap<u32, HashMap<String, Value>>,
#[serde(default, skip_serializing_if = "HashMap::is_empty")]
pub arc_edges: HashMap<(u32, u32), Edge>,
#[serde(default, skip_serializing_if = "HashMap::is_empty")]
pub original_values: HashMap<u32, Option<FieldPresence>>,
#[serde(default, skip_serializing_if = "HashSet::is_empty")]
pub synthesized_nodes: HashSet<u32>,
#[serde(default, skip_serializing_if = "HashMap::is_empty")]
pub contracted_into: HashMap<u32, u32>,
}
impl Complement {
#[must_use]
pub fn empty() -> Self {
Self::default()
}
#[must_use]
pub fn is_empty(&self) -> bool {
self.dropped_nodes.is_empty()
&& self.dropped_arcs.is_empty()
&& self.dropped_fans.is_empty()
&& self.contraction_choices.is_empty()
&& self.original_parent.is_empty()
&& self.original_extra_fields.is_empty()
&& self.arc_edges.is_empty()
&& self.original_values.is_empty()
&& self.synthesized_nodes.is_empty()
&& self.contracted_into.is_empty()
}
}