#![cfg_attr(coverage_nightly, feature(coverage_attribute))]
pub mod calibration;
pub mod com;
pub mod commands;
pub mod data;
pub mod eds;
pub mod experiment_xml;
pub mod message_log;
pub mod message_receiver;
pub mod parser;
pub mod plate_setup;
pub mod protocol;
pub mod quant;
pub mod tiff;
#[cfg(test)]
#[macro_use]
mod test_utils;
#[cfg(feature = "python")]
pub mod python;
#[cfg(feature = "python")]
use pyo3::prelude::*;
#[cfg(feature = "python")]
#[pymodule(name = "_qslib")]
mod qslib {
use pyo3::prelude::*;
#[pymodule_export]
use crate::python::PyQSConnection;
#[pymodule_export]
use crate::python::PyProtocol;
#[pymodule_export]
use crate::python::PyStep;
#[pymodule_export]
use crate::python::PyStage;
#[pymodule_export]
use crate::python::PyMessageResponse;
#[pymodule_export]
use crate::python::PyLogReceiver;
#[pymodule_export]
use crate::parser::OkResponse;
#[pymodule_export]
use crate::parser::Command;
#[pymodule_export]
use crate::python::UnexpectedMessageResponse;
#[pymodule_export]
use crate::python::DisconnectedBeforeResponse;
#[pymodule_export]
use crate::python::CommandError;
#[pymodule_export]
use crate::python::QslibException;
#[pymodule_export]
use crate::python::CommandResponseError;
#[pymodule_export]
use crate::message_log::TemperatureLog;
#[pymodule_export]
use crate::message_log::get_n_zones;
#[pymodule_export]
use crate::plate_setup::PlateSetup;
#[pymodule_export]
use crate::plate_setup::Sample;
#[pymodule_export]
use crate::data::FilterDataCollection;
#[pymodule_export]
use crate::data::PlatePointData;
#[pymodule_export]
use crate::message_log::RunLogInfo;
#[pymodule_export]
use crate::commands::AccessLevel;
#[pymodule_export]
use crate::commands::RunStatus;
#[pymodule_export]
use crate::commands::MachineStatus;
#[pymodule_export]
use crate::data::FilterSet;
#[pymodule_export]
use crate::parser::SCPICommand;
#[pymodule_export]
use crate::parser::py_quote_string_if_needed;
#[pymodule_export]
use crate::calibration::UniformityCalibration;
#[pymodule_export]
use crate::calibration::BackgroundCalibration;
#[pymodule_export]
use crate::calibration::PureDyeCalibration;
#[pymodule_export]
use crate::calibration::WellMatrix;
#[pymodule_export]
use crate::quant::QuantFile;
#[pymodule_export]
use crate::quant::QuantConditions;
#[pymodule_export]
use crate::quant::QuantRegion;
#[pymodule_export]
use crate::quant::WellQuant;
#[pymodule_export]
use crate::quant::CollectionKey;
#[pymodule_export]
use crate::quant::QuantDataCollection;
#[pymodule_export]
use crate::calibration::RoiCalibration;
#[pymodule_export]
use crate::eds::EdsArchive;
#[pymodule_export]
use crate::tiff::py_apply_roi_to_tiff;
#[pymodule_export]
use crate::tiff::py_decode_tiff;
#[pymodule_export]
use crate::data::py_reconstruct_filterdata_from_eds;
#[pymodule_export]
use crate::data::py_reconstruct_filterdata;
#[pymodule_export]
use crate::data::py_reconstruct_filterdata_from_tiffs;
#[pymodule_export]
use crate::data::py_parse_filterdata_v2_json;
#[pyfunction]
fn parse_argmap(input: String) -> PyResult<crate::parser::ArgMap> {
use crate::parser::parse_options;
parse_options(&mut input.as_bytes()).map_err(|e| {
pyo3::exceptions::PyValueError::new_err(format!("Failed to parse ArgMap: {}", e))
})
}
#[pyfunction]
fn parse_argmap_bytes(input: &[u8]) -> PyResult<crate::parser::ArgMap> {
use crate::parser::parse_options;
parse_options(&mut &input[..]).map_err(|e| {
pyo3::exceptions::PyValueError::new_err(format!("Failed to parse ArgMap: {}", e))
})
}
#[pyfunction]
fn parse_arglist(input: String) -> PyResult<crate::parser::OkResponse> {
crate::parser::OkResponse::try_from(input).map_err(|e| {
pyo3::exceptions::PyValueError::new_err(format!("Failed to parse arglist: {}", e))
})
}
#[pyfunction]
fn parse_value(input: String) -> PyResult<crate::parser::Value> {
use crate::parser::Value;
Value::parse(&mut input.as_bytes()).map_err(|e| {
pyo3::exceptions::PyValueError::new_err(format!("Failed to parse Value: {}", e))
})
}
#[pyfunction]
fn parse_value_bytes(input: &[u8]) -> PyResult<crate::parser::Value> {
use crate::parser::Value;
Value::parse(&mut &input[..]).map_err(|e| {
pyo3::exceptions::PyValueError::new_err(format!("Failed to parse Value: {}", e))
})
}
}