PQIKH4QHAAJEGMYYZT3ELJNQT53EKJ2DUKYLSK34QF5MRMKZVZFQC //! Manages turns and phases#![allow(dead_code, unused_imports)]#[derive(Debug, Default)]pub struct TurnState {current_phase: Phase,/// The game starts when this is 1.current_turn: usize,}impl TurnState {pub fn phase(&self) -> Phase {self.current_phase}}#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]pub enum Phase {#[default]Ready,Standby,Draw,PrecombatMain,Battle(BattleStep),PostcombatMain,End,}impl Phase {/// Does this phase default to a closed GES?pub fn is_closed(self) -> bool {matches!(self,Phase::Ready | Phase::Battle(BattleStep::ResolveDamage))}}#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]pub enum BattleStep {BeginBattle,DeclareAttackers,MakeAttacks,ResolveDamage,EndBattle,}
#![allow(dead_code, unused_imports)]pub use self::subtype::Subtype;pub mod subtype;#[derive(Debug, Clone)]pub enum Card {Magister {},Fragment {},}#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]pub enum FragmentProperties {/// Is not sent to the graveyard on resolutionLingering,/// Must be Set before it can be activatedPrepared,/// Can be activated during any time GES is half-closed/// (as compared to the default of when GES is open during *your* Main Phase(s))Impulse,/// Can be activated the turn it is Set.Rush,}#[derive(Debug, Clone, Copy)]pub struct CardInstance {}
//! Card subtypes//!//! Impl note: Make sure both the canonical representation [`Display`](Subtype#impl-Display-for-Subtype) and//! the exact representation [`Debug`](Subtype#impl-Debug-for-Subtype) are accessible, as membership relations//! (both quasi and not)//! use the exact to determine the relation, but canonical gets the general point across.//!//! # Examples//!//! ```//! # use magister_engine::card::Subtype;//! let subtype = Subtype::new("Mad:Dot");//! assert!(subtype.is_quasimember("mad"));//! assert!(!subtype.is_quasimember("mad-dot"));//! assert!(subtype.is_quasimember("mad:dot"));//! assert_eq!(&subtype.to_string(), "Mad-Dot");//! assert_eq!(&format!("{subtype:?}"), "mad:dot");//! ```use heck::ToTrainCase;use regex::Regex;use serde::de::Visitor;use std::{collections::{HashMap, HashSet},fmt,sync::{Arc, Mutex, OnceLock},};#[derive(Clone)]pub struct Subtype(HashSet<Arc<str>>, Arc<str>);impl PartialEq for Subtype {fn eq(&self, other: &Self) -> bool {self.0 == other.0}}impl Eq for Subtype {}impl serde::Serialize for Subtype {fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>whereS: serde::Serializer,{serializer.serialize_str(&format!("{self:?}"))}}pub(crate) struct SubtypeVisitor;impl<'de> Visitor<'de> for SubtypeVisitor {type Value = Box<str>;fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {formatter.write_str("a string of space separated subtypes")}fn visit_str<E>(self, v: &str) -> Result<Self::Value, E>whereE: serde::de::Error,{Ok(Box::from(v))}}impl<'de> serde::Deserialize<'de> for Subtype {fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>whereD: serde::Deserializer<'de>,{deserializer.deserialize_str(SubtypeVisitor).map(Subtype::new)}}impl fmt::Display for Subtype {fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {write!(f,"{}",self.1.split_whitespace().map(|s| s.to_train_case()).collect::<Vec<_>>().join(" "))}}impl fmt::Debug for Subtype {fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {if f.alternate() {f.debug_tuple("Subtype").field(&self.0).field(&self.1).finish()} else {write!(f, "{}", self.1)}}}impl Subtype {pub fn new<S: AsRef<str>>(subtype: S) -> Self {static REMOVE_SEPARATORS: OnceLock<Regex> = OnceLock::new();let remove_seps =REMOVE_SEPARATORS.get_or_init(|| Regex::new(r"(\A|\s)[-+/\\:](\z|\s)").unwrap());let subtype = subtype.as_ref().trim().to_lowercase();let subtype = remove_seps.replace_all(&subtype, " ");Self(subtype.split_whitespace().filter(|s| !["-", "+", "/", r"\", ":"].contains(s)).map(Arc::from).collect(),Arc::from(subtype),)}/// Provide an [`ExactSizeIterator`] of all subtypespub fn subtypes(&self) -> impl ExactSizeIterator<Item = &str> {self.0.iter().map(|s| s.as_ref())}/// Check if this subtype is a member of a given subtype grouppub fn is_member<S: AsRef<str>>(&self, member: S) -> bool {let member = member.as_ref().to_lowercase();self.0.iter().any(|sm| sm.as_ref() == member)}/// Check if this subtype is a quasimember of a given subtype group////// Quasimembership is defined for strings separated by `[-+/\:]`pub fn is_quasimember<S: AsRef<str>>(&self, quasimember: S) -> bool {pub(crate) static SUBTYPE_REGEXES: OnceLock<Mutex<HashMap<Box<str>, Regex>>> =OnceLock::new();let mut subtype_regex_map = SUBTYPE_REGEXES.get_or_init(|| Mutex::new(HashMap::new())).lock().unwrap();let subtype_regex = subtype_regex_map.entry(Box::from(quasimember.as_ref().to_lowercase())).or_insert_with(|| {Regex::new(&format!(r"(\A|[-+/\\:]){}(\z|[-+/\\:])",regex::escape(&quasimember.as_ref().to_lowercase()))).unwrap()});self.0.iter().any(|sm| subtype_regex.is_match(sm))}}#[cfg(test)]mod tests {use super::Subtype;#[test]fn membership_will_only_match_whole_subtypes() {let subtype = Subtype::new("Mad Relic");let subtype2 = Subtype::new("Mad-Devouring Dragon");assert!(subtype.is_member("Mad"));assert!(!subtype2.is_member("Mad"));}#[test]fn quasimembership_matches_words_in_subtypes() {let subtype = Subtype::new("Mad Relic");let subtype2 = Subtype::new("Mad-Devouring Dragon");assert!(subtype.is_quasimember("Mad"));assert!(subtype2.is_quasimember("Mad"));assert!(!subtype2.is_quasimember("evo"));}#[test]fn membership_and_quasimembership_are_caseinsensitive() {let subtype = Subtype::new("Magic-Spellcaster Ruler");assert!(subtype.is_member("MAGIC-SPELLCASTER"));assert!(subtype.is_quasimember("SPELLcAsTeR"));let subtype2 = Subtype::new("MAGIC-SPELLcaster RULer");assert_eq!(subtype, subtype2);}#[test]fn whitespace_doesnt_affect_subtype() {let subtype = Subtype::new("Magic Ruler");let subtype2 = Subtype::new("Magic \n\t\t Ruler");assert_eq!(subtype, subtype2);}#[test]fn valid_unicode_subtypes() {let subtype = Subtype::new("Hailstone (-_-/ 😻-Ruler");assert!(subtype.is_member("(-_-/"));assert!(subtype.is_member("😻-ruler"));assert!(subtype.is_quasimember("(-_-/"));assert!(subtype.is_quasimember("("));assert!(subtype.is_quasimember("_"));assert!(subtype.is_quasimember("/"));assert!(subtype.is_quasimember("😻"));assert!(subtype.is_quasimember("Ruler"));}#[test]fn test_serde() {let subtype_a = Subtype::new("Mad:Dot / Dasher");let subtype_b = Subtype::new("Mad-dot - Dasher");let subtype_c = Subtype::new("Mad:Dot - Dasher");assert_eq!(subtype_a, subtype_c);assert_ne!(subtype_a, subtype_b);assert_ne!(subtype_c, subtype_b);insta::assert_ron_snapshot!([subtype_a, subtype_b, subtype_c]);}}
---source: src/card/subtype.rsexpression: "[subtype_a, subtype_b, subtype_c]"---("mad:dot dasher", "mad-dot dasher", "mad:dot dasher")
testapp:cargo run -p testapptest:cargo test --workspace
insta = { version = "1.38.0", features = ["ron", "redactions"] }
name = "addr2line"version = "0.21.0"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"dependencies = ["gimli",][[package]]name = "adler"version = "1.0.2"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"[[package]]name = "ahash"version = "0.8.11"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011"dependencies = ["cfg-if","once_cell","version_check","zerocopy",][[package]]
][[package]]name = "autocfg"version = "1.2.0"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80"[[package]]name = "backtrace"version = "0.3.71"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d"dependencies = ["addr2line","cc","cfg-if","libc","miniz_oxide","object","rustc-demangle",][[package]]name = "base64"version = "0.13.1"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"[[package]]name = "bitflags"version = "1.3.2"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"[[package]]name = "bitflags"version = "2.5.0"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1"[[package]]name = "block-buffer"version = "0.10.4"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"dependencies = ["generic-array",
name = "castaway"version = "0.2.2"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "8a17ed5635fc8536268e5d4de1e22e81ac34419e5f052d4d51f4e01dcc263fcc"dependencies = ["rustversion",][[package]]name = "cc"version = "1.0.92"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "2678b2e3449475e95b0aa6f9b506a28e61b3dc8996592b983695e8ebb58a8b41"[[package]]name = "cfg-if"version = "1.0.0"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"[[package]]name = "compact_str"version = "0.7.1"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "f86b9c4c00838774a6d902ef931eff7470720c51d90c2e32cfe15dc304737b3f"dependencies = ["castaway","cfg-if","itoa","ryu","static_assertions",][[package]]name = "console"version = "0.15.8"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb"dependencies = ["encode_unicode","lazy_static","libc","windows-sys 0.52.0",][[package]]name = "cpufeatures"version = "0.2.12"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504"dependencies = ["libc",][[package]]name = "crossterm"version = "0.27.0"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df"dependencies = ["bitflags 2.5.0","crossterm_winapi","futures-core","libc","mio","parking_lot","signal-hook","signal-hook-mio","winapi",][[package]]name = "crossterm_winapi"version = "0.9.1"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b"dependencies = ["winapi",][[package]]name = "crypto-common"version = "0.1.6"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"dependencies = ["generic-array","typenum",][[package]]
"syn",
"syn 2.0.58",][[package]]name = "digest"version = "0.10.7"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"dependencies = ["block-buffer","crypto-common",][[package]]name = "either"version = "1.10.0"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a"[[package]]name = "encode_unicode"version = "0.3.6"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"[[package]]name = "futures-core"version = "0.3.30"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d"[[package]]name = "generic-array"version = "0.14.7"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"dependencies = ["typenum","version_check",][[package]]name = "getrandom"version = "0.2.14"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c"dependencies = ["cfg-if","libc","wasi",
name = "gimli"version = "0.28.1"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253"[[package]]name = "hashbrown"version = "0.14.3"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"dependencies = ["ahash","allocator-api2",][[package]]
[[package]]name = "heck"version = "0.5.0"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"[[package]]name = "hermit-abi"version = "0.3.9"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024"[[package]]name = "indoc"version = "2.0.5"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5"[[package]]name = "insta"version = "1.38.0"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "3eab73f58e59ca6526037208f0e98851159ec1633cf17b6cd2e1f2c3fd5d53cc"dependencies = ["console","lazy_static","linked-hash-map","pest","pest_derive","ron","serde","similar",][[package]]name = "itertools"version = "0.12.1"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569"dependencies = ["either",][[package]]name = "itoa"version = "1.0.11"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b"[[package]]name = "lazy_static"version = "1.4.0"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"[[package]]name = "libc"version = "0.2.153"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd"[[package]]name = "linked-hash-map"version = "0.5.6"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
name = "lock_api"version = "0.4.11"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45"dependencies = ["autocfg","scopeguard",][[package]]name = "log"version = "0.4.21"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c"[[package]]name = "lru"version = "0.12.3"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "d3262e75e648fce39813cb56ac41f3c3e3f65217ebf3844d818d1f9398cfb0dc"dependencies = ["hashbrown",][[package]]
[[package]]name = "miniz_oxide"version = "0.7.2"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7"dependencies = ["adler",][[package]]name = "mio"version = "0.8.11"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c"dependencies = ["libc","log","wasi","windows-sys 0.48.0",][[package]]name = "num_cpus"version = "1.16.0"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"dependencies = ["hermit-abi","libc",][[package]]name = "object"version = "0.32.2"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441"dependencies = ["memchr",][[package]]name = "once_cell"version = "1.19.0"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"[[package]]name = "parking_lot"version = "0.12.1"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"dependencies = ["lock_api","parking_lot_core",][[package]]name = "parking_lot_core"version = "0.9.9"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e"dependencies = ["cfg-if","libc","redox_syscall","smallvec","windows-targets 0.48.5",][[package]]name = "paste"version = "1.0.14"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c"[[package]]name = "pest"version = "2.7.9"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "311fb059dee1a7b802f036316d790138c613a4e8b180c822e3925a662e9f0c95"dependencies = ["memchr","thiserror","ucd-trie",][[package]]name = "pest_derive"version = "2.7.9"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "f73541b156d32197eecda1a4014d7f868fd2bcb3c550d5386087cfba442bf69c"dependencies = ["pest","pest_generator",][[package]]name = "pest_generator"version = "2.7.9"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "c35eeed0a3fab112f75165fdc026b3913f4183133f19b49be773ac9ea966e8bd"dependencies = ["pest","pest_meta","proc-macro2","quote","syn 2.0.58",][[package]]name = "pest_meta"version = "2.7.9"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "2adbf29bb9776f28caece835398781ab24435585fe0d4dc1374a61db5accedca"dependencies = ["once_cell","pest","sha2",]
name = "pin-project-lite"version = "0.2.14"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02"[[package]]name = "ppv-lite86"version = "0.2.17"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"[[package]]
][[package]]name = "rand"version = "0.8.5"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"dependencies = ["libc","rand_chacha","rand_core",][[package]]name = "rand_chacha"version = "0.3.1"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"dependencies = ["ppv-lite86","rand_core",][[package]]name = "rand_core"version = "0.6.4"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"dependencies = ["getrandom",][[package]]name = "ratatui"version = "0.26.1"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "bcb12f8fbf6c62614b0d56eb352af54f6a22410c3b079eb53ee93c7b97dd31d8"dependencies = ["bitflags 2.5.0","cassowary","compact_str","crossterm","indoc","itertools","lru","paste","stability","strum","unicode-segmentation","unicode-width",
[[package]]name = "ron"version = "0.7.1"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "88073939a61e5b7680558e6be56b419e208420c2adb92be54921fa6b72283f1a"dependencies = ["base64","bitflags 1.3.2","serde",][[package]]name = "rustc-demangle"version = "0.1.23"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
name = "ryu"version = "1.0.17"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1"[[package]]name = "scopeguard"version = "1.2.0"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"[[package]]
"syn",
"syn 2.0.58",][[package]]name = "sha2"version = "0.10.8"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"dependencies = ["cfg-if","cpufeatures","digest",][[package]]name = "signal-hook"version = "0.3.17"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801"dependencies = ["libc","signal-hook-registry",][[package]]name = "signal-hook-mio"version = "0.2.3"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af"dependencies = ["libc","mio","signal-hook",][[package]]name = "signal-hook-registry"version = "1.4.1"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"dependencies = ["libc",][[package]]name = "similar"version = "2.5.0"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "fa42c91313f1d05da9b26f267f931cf178d4aba455b4c4622dd7355eb80c6640"[[package]]name = "smallvec"version = "1.13.2"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"[[package]]name = "socket2"version = "0.5.6"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871"dependencies = ["libc","windows-sys 0.52.0",][[package]]name = "stability"version = "0.1.1"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "ebd1b177894da2a2d9120208c3386066af06a488255caabc5de8ddca22dbc3ce"dependencies = ["quote","syn 1.0.109",
"syn",
"syn 2.0.58",][[package]]name = "syn"version = "1.0.109"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"dependencies = ["proc-macro2","quote","unicode-ident",
"syn",
"syn 2.0.58",][[package]]name = "tokio"version = "1.37.0"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787"dependencies = ["backtrace","libc","mio","num_cpus","pin-project-lite","signal-hook-registry","socket2","tokio-macros","windows-sys 0.48.0",][[package]]name = "tokio-macros"version = "2.2.0"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b"dependencies = ["proc-macro2","quote","syn 2.0.58",
[[package]]name = "tokio-stream"version = "0.1.15"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af"dependencies = ["futures-core","pin-project-lite","tokio",][[package]]name = "typenum"version = "1.17.0"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"[[package]]name = "ucd-trie"version = "0.1.6"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9"
[[package]]name = "unicode-segmentation"version = "1.11.0"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202"[[package]]name = "unicode-width"version = "0.1.11"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"[[package]]name = "version_check"version = "0.9.4"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"[[package]]name = "wasi"version = "0.11.0+wasi-snapshot-preview1"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"[[package]]name = "winapi"version = "0.3.9"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"dependencies = ["winapi-i686-pc-windows-gnu","winapi-x86_64-pc-windows-gnu",][[package]]name = "winapi-i686-pc-windows-gnu"version = "0.4.0"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"[[package]]name = "winapi-x86_64-pc-windows-gnu"version = "0.4.0"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"[[package]]name = "windows-sys"version = "0.48.0"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"dependencies = ["windows-targets 0.48.5",][[package]]name = "windows-sys"version = "0.52.0"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"dependencies = ["windows-targets 0.52.4",][[package]]name = "windows-targets"version = "0.48.5"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"dependencies = ["windows_aarch64_gnullvm 0.48.5","windows_aarch64_msvc 0.48.5","windows_i686_gnu 0.48.5","windows_i686_msvc 0.48.5","windows_x86_64_gnu 0.48.5","windows_x86_64_gnullvm 0.48.5","windows_x86_64_msvc 0.48.5",][[package]]name = "windows-targets"version = "0.52.4"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "7dd37b7e5ab9018759f893a1952c9420d060016fc19a472b4bb20d1bdd694d1b"dependencies = ["windows_aarch64_gnullvm 0.52.4","windows_aarch64_msvc 0.52.4","windows_i686_gnu 0.52.4","windows_i686_msvc 0.52.4","windows_x86_64_gnu 0.52.4","windows_x86_64_gnullvm 0.52.4","windows_x86_64_msvc 0.52.4",][[package]]name = "windows_aarch64_gnullvm"version = "0.48.5"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"[[package]]name = "windows_aarch64_gnullvm"version = "0.52.4"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9"[[package]]name = "windows_aarch64_msvc"version = "0.48.5"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"[[package]]name = "windows_aarch64_msvc"version = "0.52.4"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675"[[package]]name = "windows_i686_gnu"version = "0.48.5"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"[[package]]name = "windows_i686_gnu"version = "0.52.4"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3"[[package]]name = "windows_i686_msvc"version = "0.48.5"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"[[package]]name = "windows_i686_msvc"version = "0.52.4"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02"[[package]]name = "windows_x86_64_gnu"version = "0.48.5"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"[[package]]name = "windows_x86_64_gnu"version = "0.52.4"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "5eee091590e89cc02ad514ffe3ead9eb6b660aedca2183455434b93546371a03"[[package]]name = "windows_x86_64_gnullvm"version = "0.48.5"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"[[package]]name = "windows_x86_64_gnullvm"version = "0.52.4"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177"[[package]]name = "windows_x86_64_msvc"version = "0.48.5"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"[[package]]name = "windows_x86_64_msvc"version = "0.52.4"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8"[[package]]name = "zerocopy"version = "0.7.32"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be"dependencies = ["zerocopy-derive",][[package]]name = "zerocopy-derive"version = "0.7.32"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6"dependencies = ["proc-macro2","quote","syn 2.0.58",]