Skip to main content

scirs2_core/integration/
mod.rs

1//! Cross-Module Integration Framework for SciRS2 v0.2.0
2//!
3//! This module provides comprehensive cross-module integration capabilities
4//! including zero-copy data sharing, unified configuration, type conversion
5//! traits, and common interface definitions for ecosystem-wide interoperability.
6//!
7//! # Features
8//!
9//! - **Zero-Copy Operations**: Efficient data sharing between modules without memory copies
10//! - **Unified Configuration**: Ecosystem-wide settings management with validation
11//! - **Type Conversion Traits**: Consistent patterns for converting between module types
12//! - **Interface Traits**: Common traits for module interoperability
13//!
14//! # Example
15//!
16//! ```rust
17//! use scirs2_core::integration::prelude::*;
18//!
19//! // Use unified configuration
20//! let config = EcosystemConfig::builder()
21//!     .with_precision(Precision::Double)
22//!     .with_parallel(true)
23//!     .build();
24//!
25//! // Zero-copy array sharing
26//! let data = vec![1.0f64, 2.0, 3.0, 4.0];
27//! let view = SharedArrayView::from_slice(&data);
28//! ```
29
30pub mod config;
31pub mod conversion;
32pub mod traits;
33pub mod zero_copy;
34
35// Mobile FFI bindings (v0.2.0)
36#[cfg(any(target_os = "ios", target_os = "android"))]
37pub mod mobile_ffi;
38
39// Re-export primary types
40pub use config::{
41    DiagnosticsConfig, EcosystemConfig, EcosystemConfigBuilder, LogLevel, MemoryConfig,
42    ModuleConfig, NumericConfig, ParallelConfig, Precision, PrecisionConfig,
43};
44pub use conversion::{
45    ArrayConvert, ConversionError, ConversionOptions, ConversionResult, CrossModuleConvert,
46    DataFlowConverter, LosslessConvert, LossyConvert, TypeAdapter,
47};
48pub use traits::{
49    Composable, Configurable, CrossModuleOperator, DataConsumer, DataProvider, Diagnosable,
50    Identifiable, ModuleCapability, ModuleInterface, ResourceAware, Serializable,
51    VersionedInterface,
52};
53pub use zero_copy::{
54    Alignment, ArrayBridge, BorrowedArray, BufferMut, BufferRef, ContiguousMemory, MemoryLayout,
55    OwnedArray, SharedArrayView, SharedArrayViewMut, TypedBuffer, ZeroCopyBuffer, ZeroCopySlice,
56};
57
58/// Prelude module for convenient imports
59pub mod prelude {
60    pub use super::config::{
61        DiagnosticsConfig, EcosystemConfig, EcosystemConfigBuilder, LogLevel, MemoryConfig,
62        ModuleConfig, NumericConfig, ParallelConfig, Precision, PrecisionConfig,
63    };
64    pub use super::conversion::{
65        ArrayConvert, ConversionError, ConversionOptions, ConversionResult, CrossModuleConvert,
66        DataFlowConverter, LosslessConvert, LossyConvert, TypeAdapter,
67    };
68    pub use super::traits::{
69        Composable, Configurable, CrossModuleOperator, DataConsumer, DataProvider, Diagnosable,
70        Identifiable, ModuleCapability, ModuleInterface, ResourceAware, Serializable,
71        VersionedInterface,
72    };
73    pub use super::zero_copy::{
74        Alignment, ArrayBridge, BorrowedArray, BufferMut, BufferRef, ContiguousMemory,
75        MemoryLayout, OwnedArray, SharedArrayView, SharedArrayViewMut, TypedBuffer, ZeroCopyBuffer,
76        ZeroCopySlice,
77    };
78}
79
80/// Integration error types
81#[derive(Debug, Clone, PartialEq)]
82pub enum IntegrationError {
83    /// Configuration error
84    ConfigError(String),
85    /// Type conversion error
86    ConversionError(String),
87    /// Memory layout incompatibility
88    LayoutError(String),
89    /// Module compatibility error
90    CompatibilityError(String),
91    /// Resource exhaustion
92    ResourceError(String),
93    /// Invalid operation
94    InvalidOperation(String),
95}
96
97impl std::fmt::Display for IntegrationError {
98    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
99        match self {
100            IntegrationError::ConfigError(msg) => write!(f, "Configuration error: {msg}"),
101            IntegrationError::ConversionError(msg) => write!(f, "Conversion error: {msg}"),
102            IntegrationError::LayoutError(msg) => write!(f, "Layout error: {msg}"),
103            IntegrationError::CompatibilityError(msg) => write!(f, "Compatibility error: {msg}"),
104            IntegrationError::ResourceError(msg) => write!(f, "Resource error: {msg}"),
105            IntegrationError::InvalidOperation(msg) => write!(f, "Invalid operation: {msg}"),
106        }
107    }
108}
109
110impl std::error::Error for IntegrationError {}
111
112/// Result type for integration operations
113pub type IntegrationResult<T> = Result<T, IntegrationError>;
114
115#[cfg(test)]
116mod tests {
117    use super::*;
118
119    #[test]
120    fn test_integration_error_display() {
121        let err = IntegrationError::ConfigError("test error".to_string());
122        assert_eq!(err.to_string(), "Configuration error: test error");
123    }
124}