1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
use super::*;

/// # Arguments
///
/// * `index`:
///
/// returns: Option<Cow<Self::Node>>
///
/// # Examples
///
/// ```
/// use graph_theory::GraphEngine;
/// ```
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum EdgeInsertID {
    /// No need to insert anything
    Nothing,
    /// Inserted one node, return the node id
    OneEdge(usize),
    /// Inserted two nodes, return these node ids
    TwoEdges(usize, usize),
}

/// # Arguments
///
/// * `index`:
///
/// returns: Option<Cow<Self::Node>>
///
/// # Examples
///
/// ```
/// use graph_theory::GraphEngine;
/// ```
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum EdgeRemoveAction {
    EdgeID(usize),
    Directed(DirectedEdge),
    Undirected(UndirectedEdge),
}

impl From<usize> for EdgeRemoveAction {
    fn from(value: usize) -> Self {
        Self::EdgeID(value)
    }
}

impl From<UndirectedEdge> for EdgeRemoveAction {
    fn from(edge: UndirectedEdge) -> Self {
        Self::Undirected(edge)
    }
}

impl From<DirectedEdge> for EdgeRemoveAction {
    fn from(edge: DirectedEdge) -> Self {
        Self::Directed(edge)
    }
}