use alloc::rc::Rc;
use crate::{
shared::{ArrowShape, LineStyle},
traits::{EdgeBuilder, Node},
};
pub trait Edge: Ord {
type Builder: EdgeBuilder<Edge = Self>;
type Node: Node;
fn label(&self) -> Option<&str>;
fn source(&self) -> &Rc<Self::Node>;
fn destination(&self) -> &Rc<Self::Node>;
fn line_style(&self) -> LineStyle;
fn classes(&self) -> impl Iterator<Item = &crate::shared::StyleClass>;
fn left_arrow_shape(&self) -> Option<ArrowShape>;
fn right_arrow_shape(&self) -> Option<ArrowShape>;
}