124 lines
4.6 KiB
Rust
124 lines
4.6 KiB
Rust
use plate_tool_lib::plate_instances;
|
|
use plate_tool_lib::plate::PlateFormat;
|
|
|
|
#[derive(Default, Debug, serde::Serialize, serde::Deserialize)]
|
|
pub struct MainState {
|
|
/// Stores all plates and transfers
|
|
///
|
|
/// It is not guaranteed that the current_* variables will refer
|
|
/// to UUIDs that exist in the lists, only that they did at one time.
|
|
/// This can happen if a plate or transfer is removed and set_* is not called.
|
|
pub source_plates: Vec<plate_tool_lib::plate_instances::PlateInstance>,
|
|
pub destination_plates: Vec<plate_tool_lib::plate_instances::PlateInstance>,
|
|
pub transfers: Vec<plate_tool_lib::transfer::Transfer>,
|
|
current_source: Option<plate_tool_lib::uuid::Uuid>,
|
|
current_destination: Option<plate_tool_lib::uuid::Uuid>,
|
|
current_transfer: Option<plate_tool_lib::uuid::Uuid>,
|
|
}
|
|
impl MainState {
|
|
pub fn get_current_source(&self) -> Option<plate_tool_lib::uuid::Uuid> {
|
|
self.current_source
|
|
}
|
|
pub fn get_current_destination(&self) -> Option<plate_tool_lib::uuid::Uuid> {
|
|
self.current_destination
|
|
}
|
|
pub fn get_current_transfer(&self) -> Option<plate_tool_lib::uuid::Uuid> {
|
|
self.current_transfer
|
|
}
|
|
|
|
pub fn set_current_source(&mut self, id: plate_tool_lib::uuid::Uuid) -> bool {
|
|
if self.source_plates.iter().map(|x| x.get_uuid()).find(|x| *x == id).is_some() {
|
|
self.current_source = Some(id);
|
|
true
|
|
} else {
|
|
false
|
|
}
|
|
}
|
|
pub fn set_current_destination(&mut self, id: plate_tool_lib::uuid::Uuid) -> bool {
|
|
if self.destination_plates.iter().map(|x| x.get_uuid()).find(|x| *x == id).is_some() {
|
|
self.current_destination = Some(id);
|
|
true
|
|
} else {
|
|
false
|
|
}
|
|
}
|
|
pub fn set_current_transfer(&mut self, id: plate_tool_lib::uuid::Uuid) -> bool {
|
|
if self.transfers.iter().map(|x| x.get_uuid()).find(|x| *x == id).is_some() {
|
|
self.current_transfer = Some(id);
|
|
true
|
|
} else {
|
|
false
|
|
}
|
|
}
|
|
pub fn set_no_current_source(&mut self) {
|
|
self.current_source = None;
|
|
}
|
|
pub fn set_no_current_destination(&mut self) {
|
|
self.current_destination = None;
|
|
}
|
|
pub fn set_no_current_transfer(&mut self) {
|
|
self.current_transfer = None;
|
|
}
|
|
}
|
|
|
|
pub fn construct_fake_mainstate() -> MainState {
|
|
let src_plate: plate_tool_lib::plate_instances::PlateInstance =
|
|
plate_instances::PlateInstance::new(
|
|
plate_tool_lib::plate::PlateType::Source,
|
|
PlateFormat::W96,
|
|
"src1".to_owned(),
|
|
);
|
|
let dest_plate: plate_tool_lib::plate_instances::PlateInstance =
|
|
plate_instances::PlateInstance::new(
|
|
plate_tool_lib::plate::PlateType::Destination,
|
|
PlateFormat::W96,
|
|
"dest1".to_owned(),
|
|
);
|
|
let well_a1 = plate_tool_lib::Well { row: 1, col: 1 };
|
|
let well_c3 = plate_tool_lib::Well { row: 3, col: 3 };
|
|
let well_a5 = plate_tool_lib::Well { row: 1, col: 5 };
|
|
|
|
let transfer1_region: plate_tool_lib::transfer_region::TransferRegion =
|
|
plate_tool_lib::transfer_region::TransferRegion {
|
|
source_plate: src_plate.plate,
|
|
source_region: plate_tool_lib::transfer_region::Region::Rect(well_a1, well_c3),
|
|
dest_plate: dest_plate.plate,
|
|
dest_region: plate_tool_lib::transfer_region::Region::Point(well_a1),
|
|
interleave_source: (1, 1),
|
|
interleave_dest: (1, 1),
|
|
};
|
|
let transfer1: plate_tool_lib::transfer::Transfer = plate_tool_lib::transfer::Transfer::new(
|
|
src_plate.clone(),
|
|
dest_plate.clone(),
|
|
transfer1_region,
|
|
"Shrimp".to_owned(),
|
|
);
|
|
|
|
let transfer2_region: plate_tool_lib::transfer_region::TransferRegion =
|
|
plate_tool_lib::transfer_region::TransferRegion {
|
|
source_plate: src_plate.plate,
|
|
source_region: plate_tool_lib::transfer_region::Region::Rect(well_a1, well_c3),
|
|
dest_plate: dest_plate.plate,
|
|
dest_region: plate_tool_lib::transfer_region::Region::Point(well_a5),
|
|
interleave_source: (1, 1),
|
|
interleave_dest: (2, 2),
|
|
};
|
|
let transfer2: plate_tool_lib::transfer::Transfer = plate_tool_lib::transfer::Transfer::new(
|
|
src_plate.clone(),
|
|
dest_plate.clone(),
|
|
transfer2_region,
|
|
"Shrimp".to_owned(),
|
|
);
|
|
|
|
|
|
MainState {
|
|
source_plates: vec![src_plate],
|
|
destination_plates: vec![dest_plate],
|
|
transfers: vec![transfer1, transfer2],
|
|
current_source: None,
|
|
current_destination: None,
|
|
current_transfer: None,
|
|
}
|
|
}
|
|
|