use super::*;
#[allow(non_camel_case_types)]
pub type dqcs_handle_t = c_ulonglong;
#[allow(non_camel_case_types)]
pub type dqcs_qubit_t = c_ulonglong;
#[allow(non_camel_case_types)]
pub type dqcs_cycle_t = c_longlong;
#[allow(non_camel_case_types)]
#[repr(transparent)]
#[derive(Clone, Copy)]
pub struct dqcs_plugin_state_t(*mut c_void);
impl<'a> From<&mut PluginState<'a>> for dqcs_plugin_state_t {
fn from(pc: &mut PluginState) -> dqcs_plugin_state_t {
dqcs_plugin_state_t(pc as *mut PluginState as *mut c_void)
}
}
impl Into<&mut PluginState<'static>> for dqcs_plugin_state_t {
fn into(self) -> &'static mut PluginState<'static> {
unsafe { &mut *(self.0 as *mut PluginState) }
}
}
impl dqcs_plugin_state_t {
pub fn resolve(self) -> Result<&'static mut PluginState<'static>> {
if self.0.is_null() {
inv_arg("plugin state pointer is null")
} else {
Ok(self.into())
}
}
}
#[repr(C)]
#[derive(Debug, Copy, Clone, PartialEq)]
#[allow(non_camel_case_types)]
pub enum dqcs_handle_type_t {
DQCS_HTYPE_INVALID = 0,
DQCS_HTYPE_ARB_DATA = 100,
DQCS_HTYPE_ARB_CMD = 101,
DQCS_HTYPE_ARB_CMD_QUEUE = 102,
DQCS_HTYPE_QUBIT_SET = 103,
DQCS_HTYPE_GATE = 104,
DQCS_HTYPE_MEAS = 105,
DQCS_HTYPE_MEAS_SET = 106,
DQCS_HTYPE_FRONT_PROCESS_CONFIG = 200,
DQCS_HTYPE_OPER_PROCESS_CONFIG = 201,
DQCS_HTYPE_BACK_PROCESS_CONFIG = 203,
DQCS_HTYPE_FRONT_THREAD_CONFIG = 204,
DQCS_HTYPE_OPER_THREAD_CONFIG = 205,
DQCS_HTYPE_BACK_THREAD_CONFIG = 206,
DQCS_HTYPE_SIM_CONFIG = 207,
DQCS_HTYPE_SIM = 208,
DQCS_HTYPE_FRONT_DEF = 300,
DQCS_HTYPE_OPER_DEF = 301,
DQCS_HTYPE_BACK_DEF = 302,
DQCS_HTYPE_PLUGIN_JOIN = 303,
}
#[repr(C)]
#[derive(Debug, Copy, Clone, PartialEq)]
#[allow(non_camel_case_types)]
pub enum dqcs_plugin_type_t {
DQCS_PTYPE_INVALID = -1,
DQCS_PTYPE_FRONT = 0,
DQCS_PTYPE_OPER = 1,
DQCS_PTYPE_BACK = 2,
}
impl From<PluginType> for dqcs_plugin_type_t {
fn from(x: PluginType) -> Self {
match x {
PluginType::Frontend => dqcs_plugin_type_t::DQCS_PTYPE_FRONT,
PluginType::Operator => dqcs_plugin_type_t::DQCS_PTYPE_OPER,
PluginType::Backend => dqcs_plugin_type_t::DQCS_PTYPE_BACK,
}
}
}
impl Into<Result<PluginType>> for dqcs_plugin_type_t {
fn into(self) -> Result<PluginType> {
match self {
dqcs_plugin_type_t::DQCS_PTYPE_FRONT => Ok(PluginType::Frontend),
dqcs_plugin_type_t::DQCS_PTYPE_OPER => Ok(PluginType::Operator),
dqcs_plugin_type_t::DQCS_PTYPE_BACK => Ok(PluginType::Backend),
_ => inv_arg("invalid plugin type"),
}
}
}
#[repr(C)]
#[derive(Debug, Copy, Clone, PartialEq)]
#[allow(non_camel_case_types)]
pub enum dqcs_loglevel_t {
DQCS_LOG_INVALID = -1,
DQCS_LOG_OFF = 0,
DQCS_LOG_FATAL = 1,
DQCS_LOG_ERROR = 2,
DQCS_LOG_WARN = 3,
DQCS_LOG_NOTE = 4,
DQCS_LOG_INFO = 5,
DQCS_LOG_DEBUG = 6,
DQCS_LOG_TRACE = 7,
DQCS_LOG_PASS = 8,
}
impl From<StreamCaptureMode> for dqcs_loglevel_t {
fn from(x: StreamCaptureMode) -> Self {
match x {
StreamCaptureMode::Pass => dqcs_loglevel_t::DQCS_LOG_PASS,
StreamCaptureMode::Null => dqcs_loglevel_t::DQCS_LOG_OFF,
StreamCaptureMode::Capture(loglevel) => loglevel.into(),
}
}
}
impl Into<Result<StreamCaptureMode>> for dqcs_loglevel_t {
fn into(self) -> Result<StreamCaptureMode> {
match self {
dqcs_loglevel_t::DQCS_LOG_INVALID => inv_arg("invalid level"),
dqcs_loglevel_t::DQCS_LOG_OFF => Ok(StreamCaptureMode::Null),
dqcs_loglevel_t::DQCS_LOG_FATAL => Ok(StreamCaptureMode::Capture(Loglevel::Fatal)),
dqcs_loglevel_t::DQCS_LOG_ERROR => Ok(StreamCaptureMode::Capture(Loglevel::Error)),
dqcs_loglevel_t::DQCS_LOG_WARN => Ok(StreamCaptureMode::Capture(Loglevel::Warn)),
dqcs_loglevel_t::DQCS_LOG_NOTE => Ok(StreamCaptureMode::Capture(Loglevel::Note)),
dqcs_loglevel_t::DQCS_LOG_INFO => Ok(StreamCaptureMode::Capture(Loglevel::Info)),
dqcs_loglevel_t::DQCS_LOG_DEBUG => Ok(StreamCaptureMode::Capture(Loglevel::Debug)),
dqcs_loglevel_t::DQCS_LOG_TRACE => Ok(StreamCaptureMode::Capture(Loglevel::Trace)),
dqcs_loglevel_t::DQCS_LOG_PASS => Ok(StreamCaptureMode::Pass),
}
}
}
impl From<Loglevel> for dqcs_loglevel_t {
fn from(x: Loglevel) -> Self {
match x {
Loglevel::Fatal => dqcs_loglevel_t::DQCS_LOG_FATAL,
Loglevel::Error => dqcs_loglevel_t::DQCS_LOG_ERROR,
Loglevel::Warn => dqcs_loglevel_t::DQCS_LOG_WARN,
Loglevel::Note => dqcs_loglevel_t::DQCS_LOG_NOTE,
Loglevel::Info => dqcs_loglevel_t::DQCS_LOG_INFO,
Loglevel::Debug => dqcs_loglevel_t::DQCS_LOG_DEBUG,
Loglevel::Trace => dqcs_loglevel_t::DQCS_LOG_TRACE,
}
}
}
impl dqcs_loglevel_t {
pub fn into_capture_mode(self) -> Result<StreamCaptureMode> {
self.into()
}
pub fn into_loglevel(self) -> Result<Loglevel> {
match self.into_capture_mode()? {
StreamCaptureMode::Capture(level) => Ok(level),
_ => inv_arg(format!("invalid loglevel {:?}", self)),
}
}
pub fn into_loglevel_filter(self) -> Result<LoglevelFilter> {
match self.into_capture_mode()? {
StreamCaptureMode::Capture(level) => Ok(level.into()),
StreamCaptureMode::Null => Ok(LoglevelFilter::Off),
_ => inv_arg(format!("invalid loglevel filter {:?}", self)),
}
}
}
impl From<LoglevelFilter> for dqcs_loglevel_t {
fn from(x: LoglevelFilter) -> Self {
match x {
LoglevelFilter::Off => dqcs_loglevel_t::DQCS_LOG_OFF,
LoglevelFilter::Fatal => dqcs_loglevel_t::DQCS_LOG_FATAL,
LoglevelFilter::Error => dqcs_loglevel_t::DQCS_LOG_ERROR,
LoglevelFilter::Warn => dqcs_loglevel_t::DQCS_LOG_WARN,
LoglevelFilter::Note => dqcs_loglevel_t::DQCS_LOG_NOTE,
LoglevelFilter::Info => dqcs_loglevel_t::DQCS_LOG_INFO,
LoglevelFilter::Debug => dqcs_loglevel_t::DQCS_LOG_DEBUG,
LoglevelFilter::Trace => dqcs_loglevel_t::DQCS_LOG_TRACE,
}
}
}
#[repr(C)]
#[derive(Debug, Copy, Clone, PartialEq)]
#[allow(non_camel_case_types)]
pub enum dqcs_return_t {
DQCS_FAILURE = -1,
DQCS_SUCCESS = 0,
}
#[repr(C)]
#[derive(Debug, Copy, Clone, PartialEq)]
#[allow(non_camel_case_types)]
pub enum dqcs_bool_return_t {
DQCS_BOOL_FAILURE = -1,
DQCS_FALSE = 0,
DQCS_TRUE = 1,
}
impl From<bool> for dqcs_bool_return_t {
fn from(b: bool) -> Self {
if b {
dqcs_bool_return_t::DQCS_TRUE
} else {
dqcs_bool_return_t::DQCS_FALSE
}
}
}
#[repr(C)]
#[derive(Debug, Copy, Clone, PartialEq)]
#[allow(non_camel_case_types)]
pub enum dqcs_measurement_t {
DQCS_MEAS_INVALID = -1,
DQCS_MEAS_ZERO = 0,
DQCS_MEAS_ONE = 1,
DQCS_MEAS_UNDEFINED = 2,
}
impl Into<Option<QubitMeasurementValue>> for dqcs_measurement_t {
fn into(self) -> Option<QubitMeasurementValue> {
match self {
dqcs_measurement_t::DQCS_MEAS_INVALID => None,
dqcs_measurement_t::DQCS_MEAS_ZERO => Some(QubitMeasurementValue::Zero),
dqcs_measurement_t::DQCS_MEAS_ONE => Some(QubitMeasurementValue::One),
dqcs_measurement_t::DQCS_MEAS_UNDEFINED => Some(QubitMeasurementValue::Undefined),
}
}
}
impl From<QubitMeasurementValue> for dqcs_measurement_t {
fn from(x: QubitMeasurementValue) -> dqcs_measurement_t {
match x {
QubitMeasurementValue::Undefined => dqcs_measurement_t::DQCS_MEAS_UNDEFINED,
QubitMeasurementValue::Zero => dqcs_measurement_t::DQCS_MEAS_ZERO,
QubitMeasurementValue::One => dqcs_measurement_t::DQCS_MEAS_ONE,
}
}
}
#[repr(C)]
#[derive(Debug, Copy, Clone, PartialEq)]
#[allow(non_camel_case_types)]
pub enum dqcs_path_style_t {
DQCS_PATH_STYLE_INVALID = -1,
DQCS_PATH_STYLE_KEEP = 0,
DQCS_PATH_STYLE_RELATIVE = 1,
DQCS_PATH_STYLE_ABSOLUTE = 2,
}
impl Into<Option<ReproductionPathStyle>> for dqcs_path_style_t {
fn into(self) -> Option<ReproductionPathStyle> {
match self {
dqcs_path_style_t::DQCS_PATH_STYLE_INVALID => None,
dqcs_path_style_t::DQCS_PATH_STYLE_KEEP => Some(ReproductionPathStyle::Keep),
dqcs_path_style_t::DQCS_PATH_STYLE_RELATIVE => Some(ReproductionPathStyle::Relative),
dqcs_path_style_t::DQCS_PATH_STYLE_ABSOLUTE => Some(ReproductionPathStyle::Absolute),
}
}
}
impl From<ReproductionPathStyle> for dqcs_path_style_t {
fn from(x: ReproductionPathStyle) -> dqcs_path_style_t {
match x {
ReproductionPathStyle::Keep => dqcs_path_style_t::DQCS_PATH_STYLE_KEEP,
ReproductionPathStyle::Relative => dqcs_path_style_t::DQCS_PATH_STYLE_RELATIVE,
ReproductionPathStyle::Absolute => dqcs_path_style_t::DQCS_PATH_STYLE_ABSOLUTE,
}
}
}