use crate::types::GraphProperties;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
#[must_use]
pub enum GraphConstructionPolicy {
RawLibcugraph,
#[default]
PythonCugraph,
}
#[derive(Debug, Clone)]
#[must_use]
pub struct TableGraphOptions {
pub src_col: usize,
pub dst_col: usize,
pub weight_col: Option<usize>,
pub edge_id_col: Option<usize>,
pub properties: GraphProperties,
pub renumber: bool,
pub construction_policy: GraphConstructionPolicy,
}
impl TableGraphOptions {
pub fn new(src_col: usize, dst_col: usize) -> Self {
Self {
src_col,
dst_col,
weight_col: None,
edge_id_col: None,
properties: GraphProperties::directed(),
renumber: false,
construction_policy: GraphConstructionPolicy::PythonCugraph,
}
}
pub fn weight_col(mut self, col: usize) -> Self {
self.weight_col = Some(col);
self
}
pub fn edge_id_col(mut self, col: usize) -> Self {
self.edge_id_col = Some(col);
self
}
pub fn properties(mut self, properties: GraphProperties) -> Self {
self.properties = properties;
self
}
pub fn renumber(mut self) -> Self {
self.renumber = true;
self
}
pub fn construction_policy(mut self, policy: GraphConstructionPolicy) -> Self {
self.construction_policy = policy;
self
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[must_use]
pub struct TableVertexPairOptions {
pub first_col: usize,
pub second_col: usize,
}
impl TableVertexPairOptions {
pub const fn new(first_col: usize, second_col: usize) -> Self {
Self { first_col, second_col }
}
}
#[derive(Debug, Clone, Default)]
#[must_use]
pub struct PreparedGraphOptions {
pub properties: GraphProperties,
pub renumber: bool,
pub construction_policy: GraphConstructionPolicy,
}
impl PreparedGraphOptions {
pub fn properties(mut self, properties: GraphProperties) -> Self {
self.properties = properties;
self
}
pub fn renumber(mut self) -> Self {
self.renumber = true;
self
}
pub fn construction_policy(mut self, policy: GraphConstructionPolicy) -> Self {
self.construction_policy = policy;
self
}
}