use std::marker::PhantomData; pub struct Directed; pub struct Undirected; pub struct Graph<N, E, Ty = Directed> { nodes: Vec<PhantomData<N>>, edges: Vec<PhantomData<E>>, ty: PhantomData<Ty>, } impl<N, E> Graph<N, E, Directed> { pub fn new() -> Self { Graph{nodes: Vec::new(), edges: Vec::new(), ty: PhantomData} } } impl<N, E> Graph<N, E, Undirected> { pub fn new_undirected() -> Self { Graph{nodes: Vec::new(), edges: Vec::new(), ty: PhantomData} } }