Add selectors for routes to persistable selection

This commit is contained in:
Mikolaj Wielgus 2026-05-25 13:44:31 +02:00
parent 39fb51d401
commit 31107559c8
5 changed files with 59 additions and 8 deletions

View File

@ -4,19 +4,20 @@
use std::collections::BTreeSet; use std::collections::BTreeSet;
use derive_more::Constructor;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Deserialize, Eq, Ord, PartialEq, PartialOrd, Serialize)] #[derive(Clone, Constructor, Debug, Deserialize, Eq, Ord, PartialEq, PartialOrd, Serialize)]
pub struct ComponentSelector { pub struct ComponentSelector {
pub component: String, pub component: String,
} }
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] #[derive(Clone, Debug, Default, Deserialize, Eq, Ord, PartialEq, PartialOrd, Serialize)]
pub struct ComponentSelection(pub BTreeSet<ComponentSelector>); pub struct ComponentSelection(pub BTreeSet<ComponentSelector>);
impl ComponentSelection { impl ComponentSelection {
pub fn new() -> Self { pub fn new() -> Self {
Self(BTreeSet::new()) Default::default()
} }
pub fn toggle(&mut self, selector: ComponentSelector) { pub fn toggle(&mut self, selector: ComponentSelector) {

View File

@ -5,6 +5,7 @@
mod component; mod component;
mod persistable; mod persistable;
mod pin; mod pin;
mod route;
pub use component::{ComponentSelection, ComponentSelector}; pub use component::{ComponentSelection, ComponentSelector};
pub use persistable::PersistableSelection; pub use persistable::PersistableSelection;

View File

@ -4,11 +4,15 @@
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use crate::board::selections::{ComponentSelection, PinSelection}; use crate::{
board::selections::{ComponentSelection, PinSelection},
selections::route::RouteSelection,
};
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] #[derive(Clone, Debug, Default, Deserialize, Eq, Ord, PartialEq, PartialOrd, Serialize)]
pub struct PersistableSelection { pub struct PersistableSelection {
pub components: ComponentSelection, pub components: ComponentSelection,
pub routes: RouteSelection,
pub pins: PinSelection, pub pins: PinSelection,
} }
@ -16,6 +20,7 @@ impl PersistableSelection {
pub fn new() -> Self { pub fn new() -> Self {
Self { Self {
components: ComponentSelection::new(), components: ComponentSelection::new(),
routes: RouteSelection::new(),
pins: PinSelection::new(), pins: PinSelection::new(),
} }
} }

View File

@ -4,20 +4,23 @@
use std::collections::BTreeSet; use std::collections::BTreeSet;
use derive_more::Constructor;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Deserialize, Eq, Ord, PartialEq, PartialOrd, Serialize)] #[derive(
Clone, Constructor, Debug, Default, Deserialize, Eq, Ord, PartialEq, PartialOrd, Serialize,
)]
pub struct PinSelector { pub struct PinSelector {
pub pin: String, pub pin: String,
pub layer: String, pub layer: String,
} }
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] #[derive(Clone, Debug, Default, Deserialize, Eq, Ord, PartialEq, PartialOrd, Serialize)]
pub struct PinSelection(pub BTreeSet<PinSelector>); pub struct PinSelection(pub BTreeSet<PinSelector>);
impl PinSelection { impl PinSelection {
pub fn new() -> Self { pub fn new() -> Self {
Self(BTreeSet::new()) Default::default()
} }
pub fn toggle(&mut self, selector: PinSelector) { pub fn toggle(&mut self, selector: PinSelector) {

View File

@ -0,0 +1,41 @@
// SPDX-FileCopyrightText: 2026 Topola contributors
//
// SPDX-License-Identifier: MIT OR Apache-2.0
use std::collections::BTreeSet;
use serde::{Deserialize, Serialize};
use crate::selections::PinSelector;
#[derive(Clone, Debug, Default, Deserialize, Eq, Ord, PartialEq, PartialOrd, Serialize)]
pub struct RouteSelector {
lesser_pin: PinSelector,
greater_pin: PinSelector,
}
impl RouteSelector {
pub fn new(pin1: PinSelector, pin2: PinSelector) -> Self {
Self {
lesser_pin: std::cmp::min(pin1.clone(), pin2.clone()),
greater_pin: std::cmp::max(pin1, pin2),
}
}
}
#[derive(Clone, Debug, Default, Deserialize, Eq, Ord, PartialEq, PartialOrd, Serialize)]
pub struct RouteSelection(pub BTreeSet<RouteSelector>);
impl RouteSelection {
pub fn new() -> Self {
Default::default()
}
pub fn toggle(&mut self, selector: RouteSelector) {
if self.0.contains(&selector) {
self.0.remove(&selector);
} else {
self.0.insert(selector);
}
}
}