Skip to main content

qubit_value/
lib.rs

1/*******************************************************************************
2 *
3 *    Copyright (c) 2025 - 2026 Haixing Hu.
4 *
5 *    SPDX-License-Identifier: Apache-2.0
6 *
7 *    Licensed under the Apache License, Version 2.0.
8 *
9 ******************************************************************************/
10//! # Value Processing Framework
11//!
12//! Provides type-safe value storage and access functionality, supporting single values, multiple values, and named values.
13//!
14//! # Module Description
15//!
16//! - `error` - Defines error types related to value processing
17//! - `value` - Single value container implementation
18//! - `multi_values` - Multiple values container implementation
19//! - `named` - Named value implementation
20//!
21//! # Core Features
22//!
23//! - **Type Safety**: Compile-time type checking to avoid runtime type errors
24//! - **Zero-Cost Abstraction**: Implemented using enums with no additional runtime overhead
25//! - **Multi-Value Support**: Unified interface for single and multiple value access
26//! - **Naming Support**: Provides naming functionality for values for easy identification and lookup
27//! - **Type Conversion**: Provides two sets of APIs for type checking and type conversion
28//!
29//! # Usage Examples
30//!
31//! ## Single Value Operations
32//!
33//! ```rust
34//! use qubit_value::Value;
35//!
36//! // Create and access a single value
37//! let value = Value::Int32(42);
38//! assert_eq!(value.get_int32().unwrap(), 42);
39//!
40//! // Type conversion
41//! let text = value.to::<String>().unwrap();
42//! assert_eq!(text, "42");
43//! ```
44//!
45//! ## Multiple Values Operations
46//!
47//! ```rust
48//! use qubit_value::MultiValues;
49//!
50//! // Create and access multiple values
51//! let mut values = MultiValues::Int32(vec![1, 2, 3]);
52//! assert_eq!(values.count(), 3);
53//!
54//! // Add values
55//! values.add_int32(4).unwrap();
56//! assert_eq!(values.get_int32s().unwrap(), &[1, 2, 3, 4]);
57//! ```
58//!
59//! ## Named Value Operations
60//!
61//! ```rust
62//! use qubit_value::{NamedValue, Value};
63//!
64//! // Create a named value
65//! let config = NamedValue::new("port", Value::Int32(8080));
66//! assert_eq!(config.name(), "port");
67//! assert_eq!(config.get_int32().unwrap(), 8080);
68//! ```
69//!
70
71// Sub-modules
72mod into_value_default;
73pub mod multi_values;
74mod named_multi_values;
75mod named_value;
76mod value;
77mod value_error;
78
79// Public exports
80pub use into_value_default::IntoValueDefault;
81pub use multi_values::MultiValues;
82pub use named_multi_values::NamedMultiValues;
83pub use named_value::NamedValue;
84pub use value::Value;
85pub use value_error::{
86    ValueError,
87    ValueResult,
88};