Expand description
Runtime data type descriptors and policy-driven conversion utilities.
The default feature set is empty and exposes the lightweight DataType
vocabulary plus DataTypeOf. Optional chrono, big-number, url, and
json features add mappings for external types. The converter feature
enables core scalar, string, and Duration conversions. Combine it with a
rich-type feature to enable conversions for that family, or use all.
§Conversion contract
With converter, strings can target fixed-width numeric, boolean,
character, and Duration values. Fixed-width integers can target numeric,
boolean, and Duration values; floats can target fixed-width numeric values;
Duration can target fixed-width integers and String. chrono,
big-number, url, and json add their corresponding source and target
conversions when combined with converter; JSON also enables StringMap
parsing and formatting. Other type pairs return
DataConversionError::Unsupported.
Numeric conversion defaults to NumericConversionPolicy::Exact, which
rejects truncation, rounding, and precision loss. Explicit Lossy mode
permits finite decimal/float truncation toward zero, integer-to-float IEEE
rounding, and Duration half-up rounding. Duration-to-integer and
Duration-to-String require exact divisibility in Exact mode.
Strings are not trimmed by default and are normalized exactly once.
Boolean text defaults to true and false; numeric 0/1 handling is
controlled independently by BooleanNumericPolicy. Duration text uses
[0-9]+(ns|us|µs|μs|ms|s|m|h|d)?.
§Example
use qubit_datatype::{
DataConversionError, InvalidValueReason, DataConversionOptions,
DataConverter,
};
assert!(matches!(
DataConverter::from("3.9").to::<i32>(),
Err(DataConversionError::InvalidValue {
reason: InvalidValueReason::PrecisionLoss,
..
}),
));
let lossy = DataConversionOptions::lossy();
assert_eq!(DataConverter::from(" 3.9 ").to_with::<i32>(&lossy), Ok(3));Re-exports§
pub use converter::BlankStringPolicy;pub use converter::BooleanConversionOptions;pub use converter::BooleanLiteralConflictError;pub use converter::BooleanNumericPolicy;pub use converter::CollectionConversionOptions;pub use converter::DataConversionError;pub use converter::DataConversionOptions;pub use converter::DataConvertTo;pub use converter::DataConverter;pub use converter::DataConverters;pub use converter::DataFormat;pub use converter::DataListConversionError;pub use converter::DurationConversionOptions;pub use converter::DurationOverflowError;pub use converter::DurationUnit;pub use converter::EmptyItemPolicy;pub use converter::InvalidValueReason;pub use converter::NumericConversionPolicy;pub use converter::ScalarItem;pub use converter::ScalarItemError;pub use converter::ScalarItems;pub use converter::ScalarStringDataConverters;pub use converter::StringConversionOptions;pub use converter::StringNormalizationError;pub use converter::SuffixlessDurationPolicy;pub use datatype::DataType;pub use datatype::DataTypeOf;pub use datatype::DataTypeParseError;