# SmartChannel **SmartChannel** is a Rust library built on top of Tokio that enhances the capabilities of the standard Tokio sender/receiver channels by providing additional features such as ID-based sender/receiver pairs. --- ## **Features** - **ID-Linked Channels**: Each sender and receiver is associated with a unique connection ID, enabling verification of sender-receiver bindings. - **Lightweight Wrappers**: Sender and receiver types wrap Tokio's standard channels, adding extra metadata while keeping the same behavior. - **Interoperability**: SmartChannel supports direct dereferencing to use all standard Tokio sender/receiver methods. - **Custom Bindings**: Provides bind and channel functions to associate custom IDs with channels. --- ## **Installation** Add the following line to your Cargo.toml: ```toml [dependencies] smart_channel = "0.1.0" ``` ## **Usage** ### Exemple 1: Basic Usage ```rust use smart_channel::channel; #[tokio::main] async fn main() { let id = 1; let (sender, mut receiver) = channel::<String, _>(100, id); tokio::spawn(async move { sender.send("Hello from sender!".to_string()).await.unwrap(); }); let message = receiver.recv().await.unwrap(); assert_eq!(message, "Hello from sender!"); } ``` ### Example 2: Sender and Receiver ID Matching ```rust use smart_channel::channel; #[tokio::main] async fn main() { let id = "channel-1".to_string(); let (sender, receiver) = channel::<i32, _>(100, id.clone()); assert!(sender.is_bound_to(&receiver)); println!("Sender and receiver are bound by ID: {:?}", id.id); } ``` ## **Exemple 3: Multiple Channels with Differents IDs** ```rust use smart_channel::channel; #[tokio::main] async fn main() { let id1 = "channel-1".to_string(); let id2 = "channel-2".to_string(); let (sender1, receiver1) = channel::<String, _>(100, id1.clone()); let (sender2, receiver2) = channel::<String, _>(100, id2.clone()); assert!(sender1.is_bound_to(&receiver1)); assert!(!sender1.is_bound_to(&receiver2)); // Different IDs println!("Channel-1: bound correctly"); } ``` --- ## **Contributing** Contributions are welcome! If you encounter bugs, have feature requests, or want to submit a pull request, feel free to visit the GitHub repository. Check the issues section for upcoming features, such as clonable receivers and broadcasting channels. ## **License** This project is licensed under the MIT License. See the LICENSE file for details.