From c5bd0f6ae29beb061dc3bcb5d3de37c1cefd82cb Mon Sep 17 00:00:00 2001 From: Kai Mast Date: Sat, 20 Sep 2025 15:47:18 -0700 Subject: [PATCH 1/2] docs: add two examples --- Cargo.lock | 149 ++++++++++++++++++++++ examples/chat_network.rs | 249 +++++++++++++++++++++++++++++++++++++ examples/shared_counter.rs | 120 ++++++++++++++++++ 3 files changed, 518 insertions(+) create mode 100644 examples/chat_network.rs create mode 100644 examples/shared_counter.rs diff --git a/Cargo.lock b/Cargo.lock index f7faa17..26e2ae7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -87,6 +87,7 @@ dependencies = [ "log", "parking_lot", "rand", + "rusty-hooks-integration", "serde", "tokio", ] @@ -144,12 +145,27 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" +[[package]] +name = "ci_info" +version = "0.14.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "840dbb7bdd1f2c4d434d6b08420ef204e0bfad0ab31a07a80a1248d24cc6e38b" +dependencies = [ + "envmnt", +] + [[package]] name = "colorchoice" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + [[package]] name = "env_filter" version = "0.1.3" @@ -173,6 +189,31 @@ dependencies = [ "log", ] +[[package]] +name = "envmnt" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d73999a2b8871e74c8b8bc23759ee9f3d85011b24fafc91a4b3b5c8cc8185501" +dependencies = [ + "fsio", + "indexmap 1.9.3", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "fsio" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4944f16eb6a05b4b2b79986b4786867bb275f52882adea798f17cc2588f25b2" +dependencies = [ + "dunce", +] + [[package]] name = "futures" version = "0.3.31" @@ -280,6 +321,38 @@ version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", +] + +[[package]] +name = "indexmap" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2481980430f9f78649238835720ddccc57e52df14ffce1c6f37391d61b563e9" +dependencies = [ + "equivalent", + "hashbrown 0.15.5", +] + [[package]] name = "io-uring" version = "0.7.9" @@ -369,6 +442,12 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "nias" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0135fd396265547ac8bd1aa38616bd1b39d9e8e9d5c9c7d8ef72fc945ba5b122" + [[package]] name = "object" version = "0.36.7" @@ -540,6 +619,17 @@ version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" +[[package]] +name = "rusty-hooks-integration" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "574425cbec2ce8eeaf152b0eda7c352b7aef0f69d6eca9643057dbd2a2b5f454" +dependencies = [ + "ci_info", + "nias", + "toml", +] + [[package]] name = "scopeguard" version = "1.2.0" @@ -566,6 +656,15 @@ dependencies = [ "syn", ] +[[package]] +name = "serde_spanned" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" +dependencies = [ + "serde", +] + [[package]] name = "slab" version = "0.4.11" @@ -603,6 +702,47 @@ dependencies = [ "slab", ] +[[package]] +name = "toml" +version = "0.8.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml_datetime" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.22.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" +dependencies = [ + "indexmap 2.11.0", + "serde", + "serde_spanned", + "toml_datetime", + "toml_write", + "winnow", +] + +[[package]] +name = "toml_write" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" + [[package]] name = "unicode-ident" version = "1.0.18" @@ -783,6 +923,15 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" +[[package]] +name = "winnow" +version = "0.7.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" +dependencies = [ + "memchr", +] + [[package]] name = "wit-bindgen-rt" version = "0.39.0" diff --git a/examples/chat_network.rs b/examples/chat_network.rs new file mode 100644 index 0000000..a1aafea --- /dev/null +++ b/examples/chat_network.rs @@ -0,0 +1,249 @@ +//! Chat Network Example +//! +//! This example demonstrates asim's network simulation capabilities by creating +//! a simple chat/messaging system with multiple nodes connected in a network. +//! +//! Key concepts demonstrated: +//! - **Network Nodes**: Creating nodes with custom message handling logic +//! - **Network Links**: Connecting nodes with realistic latency and bandwidth +//! - **Message Broadcasting**: Sending messages to multiple peers +//! - **Network Topology**: Building a realistic network structure +//! - **Bandwidth/Latency Simulation**: Modeling real network constraints +//! +//! The simulation: +//! - Creates 4 chat nodes representing different users +//! - Connects them in a hub topology (one central node, others connect to it) +//! - Simulates a chat conversation with messages being sent and relayed +//! - Shows how network delays affect message delivery timing +//! - Demonstrates both direct messages and broadcast messages + +use asim::network::{NetworkMessage, Object}; +use asim::{network, sync, time, Runtime}; +use std::cell::RefCell; +use std::rc::Rc; + +#[derive(Clone, Debug)] +struct ChatMessage { + sender_name: String, + content: String, + timestamp: time::Time, +} + +impl network::NetworkMessage for ChatMessage { + fn get_size(&self) -> u64 { + // Simulate realistic message size: name + content + overhead + (self.sender_name.len() + self.content.len() + 50) as u64 + } +} + +struct ChatNodeData { + name: String, + message_log: RefCell>, + notification_sender: RefCell>>, +} + +impl network::NodeData for ChatNodeData {} + +struct ChatNodeCallback; + +#[async_trait::async_trait(?Send)] +impl network::NodeCallback for ChatNodeCallback { + async fn handle_message( + &self, + node: &Rc>, + source: network::ObjectId, + message: ChatMessage, + ) { + let node_name = &node.get_data().name; + + // Log the received message + node.get_data() + .message_log + .borrow_mut() + .push(message.clone()); + + println!( + "[{}] {} received message from {}: \"{}\" (sent at {:?}, received at {:?})", + time::now(), + node_name, + message.sender_name, + message.content, + message.timestamp, + time::now() + ); + + // If this node is the hub, relay the message to other connected nodes + if node_name == "Hub" && message.sender_name != "Hub" { + println!( + "[{}] {} relaying message to other nodes", + time::now(), + node_name + ); + + // Broadcast to all peers except the sender + for peer_id in node.get_peers() { + if peer_id != source { + node.send_to(&peer_id, message.clone()); + } + } + } + + // Notify any waiting listeners + if let Some(sender) = node.get_data().notification_sender.borrow_mut().as_ref() { + sender.send(message); + } + } + + fn node_started(&self, node: &network::Node) { + println!( + "[{}] Chat node '{}' joined the network", + time::now(), + node.get_data().name + ); + } + + fn peer_disconnected( + &self, + node: &network::Node, + peer: network::ObjectId, + ) { + println!( + "[{}] {} lost connection to peer {}", + time::now(), + node.get_data().name, + peer + ); + } +} + +#[derive(Default)] +struct ChatLinkCallback; + +impl network::LinkCallback for ChatLinkCallback { + fn message_sent( + &self, + source: &network::ObjectId, + destination: &network::ObjectId, + message: &ChatMessage, + ) { + println!( + "[{}] Message \"{}\" sent from {} to {} (size: {} bytes)", + time::now(), + message.content, + source, + destination, + message.get_size() + ); + } +} + +fn create_chat_node( + name: &str, + bandwidth: network::Bandwidth, +) -> Rc> { + let data = ChatNodeData { + name: name.to_string(), + message_log: RefCell::new(Vec::new()), + notification_sender: RefCell::new(None), + }; + + network::Node::new(bandwidth, data, Box::new(ChatNodeCallback)) +} + +fn main() { + env_logger::init(); + + let rt = Runtime::new(); + + rt.block_on(async { + println!("=== Chat Network Simulation Starting ===\n"); + + // Create network parameters + let high_bandwidth = network::Bandwidth::from_megabits_per_second(100); // Fast connection + let medium_bandwidth = network::Bandwidth::from_megabits_per_second(50); // Medium connection + let lan_latency = network::Latency::from_millis(5); // Local network + let wan_latency = network::Latency::from_millis(50); // Internet connection + + // Create chat nodes + let hub = create_chat_node("Hub", high_bandwidth); + let alice = create_chat_node("Alice", medium_bandwidth); + let bob = create_chat_node("Bob", medium_bandwidth); + let charlie = create_chat_node("Charlie", medium_bandwidth); + + // Create hub topology - all nodes connect through the hub + println!("Setting up network topology (hub-and-spoke):"); + network::Node::connect(hub.clone(), alice.clone(), lan_latency, Box::new(ChatLinkCallback)); + network::Node::connect(hub.clone(), bob.clone(), wan_latency, Box::new(ChatLinkCallback)); + network::Node::connect(hub.clone(), charlie.clone(), lan_latency, Box::new(ChatLinkCallback)); + + // Give nodes time to initialize + time::sleep(time::Duration::from_millis(100)).await; + + println!("\n=== Starting Chat Conversation ===\n"); + + // Alice sends a message (will be relayed by hub to others) + let alice_message = ChatMessage { + sender_name: "Alice".to_string(), + content: "Hello everyone! How's the simulation going?".to_string(), + timestamp: time::now(), + }; + + // Alice broadcasts to hub (which will relay) + let hub_id = hub.get_identifier(); + alice.send_to(&hub_id, alice_message); + + // Wait for message propagation + time::sleep(time::Duration::from_millis(200)).await; + + // Bob responds + let bob_message = ChatMessage { + sender_name: "Bob".to_string(), + content: "Great! The network delays feel realistic.".to_string(), + timestamp: time::now(), + }; + + bob.send_to(&hub_id, bob_message); + + // Wait a bit + time::sleep(time::Duration::from_millis(150)).await; + + // Charlie sends a longer message (will take more time due to size) + let charlie_message = ChatMessage { + sender_name: "Charlie".to_string(), + content: "This is a much longer message to demonstrate how bandwidth affects larger messages. The network simulation is working perfectly and shows realistic timing behavior!".to_string(), + timestamp: time::now(), + }; + + charlie.send_to(&hub_id, charlie_message); + + // Wait for all messages to propagate + time::sleep(time::Duration::from_millis(300)).await; + + // Hub sends a final message + let hub_message = ChatMessage { + sender_name: "Hub".to_string(), + content: "Simulation complete! All messages delivered.".to_string(), + timestamp: time::now(), + }; + + hub.broadcast(hub_message, None); + + // Wait for final propagation + time::sleep(time::Duration::from_millis(100)).await; + + println!("\n=== Simulation Results ==="); + println!("Final simulation time: {:?}", time::now()); + + // Show message logs for each node + for node in [&alice, &bob, &charlie] { + let data = node.get_data(); + let log = data.message_log.borrow(); + println!("\n{} received {} messages:", data.name, log.len()); + for msg in log.iter() { + println!(" - From {}: \"{}\"", msg.sender_name, msg.content); + } + } + + println!("\nāœ“ Chat network simulation completed successfully!"); + }); +} diff --git a/examples/shared_counter.rs b/examples/shared_counter.rs new file mode 100644 index 0000000..f0b90ed --- /dev/null +++ b/examples/shared_counter.rs @@ -0,0 +1,120 @@ +//! Shared Counter Example +//! +//! This example demonstrates synchronization primitives in asim by simulating +//! multiple tasks that concurrently access a shared resource (a counter). +//! +//! Key concepts demonstrated: +//! - **Mutex**: Protecting shared data from concurrent access +//! - **MPSC Channels**: Communication between tasks via message passing +//! - **Task Spawning**: Creating multiple concurrent tasks with `asim::spawn()` +//! - **Time Simulation**: Using `time::sleep()` to simulate realistic delays +//! +//! The simulation: +//! - Spawns 5 tasks, each incrementing a shared counter 3 times (15 total) +//! - Each task has different timing patterns to show realistic concurrency +//! - Tasks report progress through a channel for coordination +//! - The mutex ensures thread-safe access to the shared counter +//! - Verifies correctness by checking final values + +use asim::{sync, time, Runtime}; +use std::rc::Rc; + +fn main() { + env_logger::init(); + + let rt = Runtime::new(); + + rt.block_on(async { + // Create a shared counter protected by a mutex + let counter = Rc::new(sync::Mutex::new(0i32)); + + // Create a channel for tasks to report their work + let (sender, receiver) = sync::mpsc::channel(); + let sender = Rc::new(sender); + + println!( + "Starting simulation with shared counter at time {:?}", + time::now() + ); + + // Spawn multiple tasks that will increment the shared counter + for task_id in 0..5 { + let counter_clone = counter.clone(); + let sender_clone = sender.clone(); + + asim::spawn(async move { + // Each task does some work multiple times + for iteration in 0..3 { + // Simulate some work before accessing the shared resource + time::sleep(time::Duration::from_millis(100 + task_id * 50)).await; + + // Access the shared counter (critical section) + { + let mut guard = counter_clone.lock().await; + let old_value = *guard; + + // Simulate some processing time while holding the lock + time::sleep(time::Duration::from_millis(50)).await; + + *guard += 1; + let new_value = *guard; + + println!( + "Task {} (iteration {}) at time {:?}: counter {} -> {}", + task_id, + iteration, + time::now(), + old_value, + new_value + ); + } // Lock is automatically released here + + // Notify completion of this iteration + sender_clone.send(format!( + "Task {} completed iteration {}", + task_id, iteration + )); + } + + // Notify task completion + sender_clone.send(format!("Task {} finished all work", task_id)); + }); + } + + // Drop the original sender reference so the receiver knows when all tasks are done + // Note: we need to drop the Rc, but since tasks still hold references, + // we'll use a different approach - count completed tasks instead + + // Collect reports from all tasks + let mut completed_tasks = 0; + let mut total_iterations = 0; + const TOTAL_TASKS: usize = 5; + + while completed_tasks < TOTAL_TASKS { + let messages = receiver.recv().await; + + for message in messages { + println!("Report: {}", message); + if message.contains("finished all work") { + completed_tasks += 1; + } else if message.contains("completed iteration") { + total_iterations += 1; + } + } + } + + // Check final results + let final_counter = *counter.lock().await; + println!("\nSimulation completed at time {:?}", time::now()); + println!("Final counter value: {}", final_counter); + println!("Total iterations completed: {}", total_iterations); + println!("Tasks completed: {}", completed_tasks); + + // Verify correctness: 5 tasks Ɨ 3 iterations = 15 increments + assert_eq!(final_counter, 15); + assert_eq!(total_iterations, 15); + assert_eq!(completed_tasks, 5); + + println!("āœ“ All synchronization worked correctly!"); + }); +} From 0de14cecb89bca5e660a0f186cee6c6536b9e710 Mon Sep 17 00:00:00 2001 From: Kai Mast Date: Sat, 20 Sep 2025 15:48:34 -0700 Subject: [PATCH 2/2] chore: upgrade to rust 1.90 --- Cargo.lock | 108 +++++++++++++++++++++++++------------------- Cargo.toml | 2 +- rust-toolchain.toml | 2 +- src/lib.rs | 2 - 4 files changed, 64 insertions(+), 50 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 26e2ae7..49a24fb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -103,9 +103,9 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.88" +version = "0.1.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", @@ -135,15 +135,15 @@ dependencies = [ [[package]] name = "bitflags" -version = "2.9.1" +version = "2.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" +checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" [[package]] name = "cfg-if" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" +checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" [[package]] name = "ci_info" @@ -312,7 +312,7 @@ dependencies = [ "cfg-if", "libc", "r-efi", - "wasi 0.14.2+wasi-0.2.4", + "wasi 0.14.7+wasi-0.2.4", ] [[package]] @@ -329,9 +329,9 @@ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "hashbrown" -version = "0.15.5" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" [[package]] name = "indexmap" @@ -345,19 +345,19 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.11.0" +version = "2.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2481980430f9f78649238835720ddccc57e52df14ffce1c6f37391d61b563e9" +checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" dependencies = [ "equivalent", - "hashbrown 0.15.5", + "hashbrown 0.16.0", ] [[package]] name = "io-uring" -version = "0.7.9" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4" +checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b" dependencies = [ "bitflags", "cfg-if", @@ -412,9 +412,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.27" +version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" [[package]] name = "memchr" @@ -524,9 +524,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.97" +version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d61789d7719defeb74ea5fe81f2fdfdbd28a803847077cecce2ff14e1472f6f1" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" dependencies = [ "unicode-ident", ] @@ -586,9 +586,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.11.1" +version = "1.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "23d7fd106d8c02486a8d64e778353d1cffe08ce79ac2e82f540c86d0facf6912" dependencies = [ "aho-corasick", "memchr", @@ -598,9 +598,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "6b9458fa0bfeeac22b5ca447c63aaf45f28439a709ccd244698632f9aa6394d6" dependencies = [ "aho-corasick", "memchr", @@ -609,9 +609,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" [[package]] name = "rustc-demangle" @@ -638,18 +638,28 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "serde" -version = "1.0.219" +version = "1.0.225" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd6c24dee235d0da097043389623fb913daddf92c76e9f5a1db88607a0bcbd1d" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.225" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +checksum = "659356f9a0cb1e529b24c01e43ad2bdf520ec4ceaf83047b83ddcc2251f96383" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.219" +version = "1.0.225" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +checksum = "0ea936adf78b1f766949a4977b91d2f5595825bd6ec079aa9543ad2685fc4516" dependencies = [ "proc-macro2", "quote", @@ -679,9 +689,9 @@ checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] name = "syn" -version = "2.0.104" +version = "2.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" +checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" dependencies = [ "proc-macro2", "quote", @@ -729,7 +739,7 @@ version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap 2.11.0", + "indexmap 2.11.4", "serde", "serde_spanned", "toml_datetime", @@ -745,9 +755,9 @@ checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" [[package]] name = "unicode-ident" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" [[package]] name = "utf8parse" @@ -763,11 +773,20 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasi" -version = "0.14.2+wasi-0.2.4" +version = "0.14.7+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +checksum = "883478de20367e224c0090af9cf5f9fa85bed63a95c1abf3afc5c083ebc06e8c" dependencies = [ - "wit-bindgen-rt", + "wasip2", +] + +[[package]] +name = "wasip2" +version = "1.0.1+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" +dependencies = [ + "wit-bindgen", ] [[package]] @@ -933,28 +952,25 @@ dependencies = [ ] [[package]] -name = "wit-bindgen-rt" -version = "0.39.0" +name = "wit-bindgen" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" -dependencies = [ - "bitflags", -] +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" [[package]] name = "zerocopy" -version = "0.8.26" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.26" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index 9efb136..5946413 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" license = "MIT" description = "Discrete Event Simluation for Async Rust" repository = "https://github.com/kaimast/asim" -rust-version = "1.89" +rust-version = "1.90" [workspace] members = ["macros"] diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 5244d23..2603364 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,3 +1,3 @@ [toolchain] -channel="1.89" +channel="1.90" components=["cargo", "rustc", "rustfmt", "clippy"] diff --git a/src/lib.rs b/src/lib.rs index efdf63d..79724e7 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,5 +1,3 @@ -#![allow(incomplete_features)] - /// asim is a discrete event simulator for Rust /// /// It implements an asynchronous runtime and provides utility function