xio_base_datatypes 0.8.0

XIO base data structures
Documentation
#[cfg(feature = "serde")]
#[macro_use]
extern crate serde;

#[macro_use]
extern crate snafu;

#[cfg(feature = "bidir-map")]
extern crate bidir_map;

extern crate indexmap;
extern crate try_from;

mod channel_permission;
mod convert;
mod data_type;
mod data_value;
mod error_code;
mod job_stopped_reason;
mod module_channel_reference;
mod module_state;
mod override_option;
mod parameter_value;
mod storage_type;
mod storage_type_with_mixed;

pub use channel_permission::ChannelPermission;
pub use convert::TryConvertTo;
pub use data_type::{DataType, HasDataType};
pub use data_value::{
    ConstructParameterMask, DataValue, DataValueDescriptive, DataValueRaw,
    DeconstructParameterMask, IsParameterMask,
};
pub use error_code::{ErrorCode, HasErrorCode};
pub use job_stopped_reason::JobStoppedReason;
pub use module_channel_reference::{
    IsModuleChannelReference, ModuleChannelReference,
};
pub use module_state::ModuleState;
pub use override_option::OverrideOption;
pub use parameter_value::{ParameterValue, ParameterValueRaw};
pub use storage_type::{HasStorageType, IsInStorageType, StorageType};
pub use storage_type_with_mixed::StorageTypeWithMixed;

use indexmap::IndexSet;
use snafu::{Backtrace, Snafu};

pub type Result<T, E = Error> = std::result::Result<T, E>;

#[derive(Debug, Snafu)]
pub enum Error {
    #[snafu(display(
        "Value {:?} is not in range for type {:?}",
        value,
        datatype
    ))]
    ValueOutOfRangeForType {
        value: DataValueRaw,
        datatype: DataType,
        backtrace: Backtrace,
    },
    #[snafu(display(
        "Expected datatype compatible with {:?} found {:?}",
        expected,
        found
    ))]
    IncompatibleDataType {
        expected: DataType,
        found: DataType,
        backtrace: Backtrace,
    },
    #[snafu(display(
        "Parameter {:?} with index {} of mask range 64",
        parameter,
        index
    ))]
    ParameterOutOfMaskRange {
        parameter: String,
        index: usize,
        backtrace: Backtrace,
    },
    #[snafu(display(
        "Mask {:#b} has bit {} for non-existing parameters set",
        mask,
        index
    ))]
    ParameterMaskOutOfRange {
        mask: u64,
        index: usize,
        backtrace: Backtrace,
    },
    #[snafu(display(
        "Parameters {:?} are not in parameter set",
        parameters
    ))]
    ParametersNotInParameterSet {
        parameters: IndexSet<String>,
        backtrace: Backtrace,
    },
}