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
72pub mod multi_values;
73mod named_multi_values;
74mod named_value;
75mod value;
76mod value_error;
77
78// Public exports
79pub use multi_values::MultiValues;
80pub use named_multi_values::NamedMultiValues;
81pub use named_value::NamedValue;
82pub use value::Value;
83pub use value_error::{
84 ValueError,
85 ValueResult,
86};
87
88// Keep these traits reachable for the public generic method bounds while
89// keeping them out of generated public-facing docs.
90#[doc(hidden)]
91pub use value::{
92 ValueConstructor,
93 ValueConverter,
94 ValueGetter,
95 ValueSetter,
96};