From 57c970e22e85114443a06d1b69f6cbae2ebcbb2e Mon Sep 17 00:00:00 2001 From: Mikolaj Wielgus Date: Sun, 21 Jul 2024 14:49:43 +0200 Subject: [PATCH] drawing: obtain `HeadRef` via new trait for abstract reference objects --- src/drawing/band.rs | 2 ++ src/drawing/head.rs | 9 +++------ src/graph.rs | 4 +++- src/router/router.rs | 2 +- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/drawing/band.rs b/src/drawing/band.rs index b7d497a..202d9d9 100644 --- a/src/drawing/band.rs +++ b/src/drawing/band.rs @@ -5,3 +5,5 @@ pub enum BandFirstSegIndex { Straight(LoneLooseSegIndex), Bended(SeqLooseSegIndex), } + +pub struct BandRef {} diff --git a/src/drawing/head.rs b/src/drawing/head.rs index 1572d85..41d2a46 100644 --- a/src/drawing/head.rs +++ b/src/drawing/head.rs @@ -1,6 +1,6 @@ use enum_dispatch::enum_dispatch; -use crate::geometry::shape::MeasureLength; +use crate::{geometry::shape::MeasureLength, graph::MakeRef}; use super::{ cane::Cane, @@ -22,11 +22,8 @@ pub enum Head { Cane(CaneHead), } -impl Head { - pub fn ref_<'a, CW: Copy, R: AccessRules>( - &self, - drawing: &'a Drawing, - ) -> HeadRef<'a, CW, R> { +impl<'a, CW: Copy, R: AccessRules> MakeRef<'a, HeadRef<'a, CW, R>, Drawing> for Head { + fn ref_(&self, drawing: &'a Drawing) -> HeadRef<'a, CW, R> { HeadRef::new(*self, drawing) } } diff --git a/src/graph.rs b/src/graph.rs index b9d47c7..d83b858 100644 --- a/src/graph.rs +++ b/src/graph.rs @@ -6,7 +6,9 @@ use std::{ use enum_dispatch::enum_dispatch; use petgraph::stable_graph::NodeIndex; -// Due to apparent limitations of enum_dispatch we're forced to import some types backwards. +pub trait MakeRef<'a, R: 'a, C> { + fn ref_(&self, context: &'a C) -> R; +} #[enum_dispatch] pub trait GetPetgraphIndex { diff --git a/src/router/router.rs b/src/router/router.rs index d567214..8788078 100644 --- a/src/router/router.rs +++ b/src/router/router.rs @@ -16,7 +16,7 @@ use crate::{ primitive::{AccessPrimitiveShape, PrimitiveShape}, shape::{AccessShape, MeasureLength}, }, - graph::GetPetgraphIndex, + graph::{GetPetgraphIndex, MakeRef}, layout::Layout, };