diff --git a/src/rust/Cargo.lock b/src/rust/Cargo.lock index 71b24288d578fa091b19511661cf940a93372c2a..9b67a7a8139681f0bff9c2113bb069f073d235bf 100644 --- a/src/rust/Cargo.lock +++ b/src/rust/Cargo.lock @@ -2,6 +2,17 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "ahash" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", +] + [[package]] name = "amadeus" version = "0.1.0" @@ -19,7 +30,9 @@ version = "0.1.0" dependencies = [ "commons", "getset", + "lru", "serde", + "smallstring", "tokio", ] @@ -262,7 +275,7 @@ dependencies = [ [[package]] name = "getset" -version = "0.1.2" +version = "0.1.3" dependencies = [ "proc-macro-error", "proc-macro2", @@ -295,6 +308,15 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash", +] + [[package]] name = "heck" version = "0.4.0" @@ -398,7 +420,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" dependencies = [ "autocfg", - "hashbrown", + "hashbrown 0.12.3", ] [[package]] @@ -541,6 +563,15 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "lru" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71e7d46de488603ffdd5f30afbc64fbba2378214a2c3a2fb83abf3d33126df17" +dependencies = [ + "hashbrown 0.13.2", +] + [[package]] name = "memchr" version = "2.5.0" @@ -897,6 +928,23 @@ dependencies = [ "autocfg", ] +[[package]] +name = "smallstring" +version = "0.1.3" +dependencies = [ + "serde", + "smallvec", +] + +[[package]] +name = "smallvec" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" +dependencies = [ + "serde", +] + [[package]] name = "socket2" version = "0.4.7" diff --git a/src/rust/Cargo.toml b/src/rust/Cargo.toml index 5b2fdfea8a6c03caf3c7c6cf4a9e0607dec97f47..79db8e61efa7eadd58075a73fd719da3a9af4f78 100644 --- a/src/rust/Cargo.toml +++ b/src/rust/Cargo.toml @@ -31,6 +31,8 @@ libc = "0.2" lazy_static = "^1" thiserror = "^1" +smallvec = { version = "^1", default-features = false, features = ["serde"] } + toml = { version = "^0.5", features = ["preserve_order"] } serde = { version = "^1", default-features = false, features = [ "std", diff --git a/src/rust/getset/Cargo.toml b/src/rust/getset/Cargo.toml index b6b65079c2a35d3d37619ccd1c79c4e6539957f4..0f46a462e69bf78426dad8beaf7cc406c51cea66 100644 --- a/src/rust/getset/Cargo.toml +++ b/src/rust/getset/Cargo.toml @@ -1,19 +1,11 @@ [package] name = "getset" -description = """ -Getset, we're ready to go! - -A procedural macro for generating the most basic getters and setters on fields. -""" -version = "0.1.2" +description = "A procedural macro for generating the most basic getters and setters on fields." +version = "0.1.3" authors = ["Ana Hobden <ana@hoverbear.org>"] license = "MIT" -edition = "2018" -categories = ["development-tools::procedural-macro-helpers"] -keywords = ["macro", "getter", "setter", "getters", "setters"] -readme = "README.md" -repository = "https://github.com/Hoverbear/getset" +edition.workspace = true [lib] proc-macro = true diff --git a/src/rust/getset/examples/simple.rs b/src/rust/getset/examples/simple.rs deleted file mode 100644 index 62f072f37afeb751e6bcd63a01867524beb7c110..0000000000000000000000000000000000000000 --- a/src/rust/getset/examples/simple.rs +++ /dev/null @@ -1,24 +0,0 @@ -use getset::{CopyGetters, Getters, MutGetters, Setters}; - -#[derive(Getters, Setters, MutGetters, CopyGetters, Default)] -pub struct Foo<T> -where - T: Copy + Clone + Default, -{ - /// Doc comments are supported! - /// Multiline, even. - #[getset(get, set, get_mut)] - private: T, - - /// Doc comments are supported! - /// Multiline, even. - #[getset(get_copy = "pub", set = "pub", get_mut = "pub")] - public: T, -} - -fn main() { - let mut foobar = Foo::default(); - foobar.set_private(1); - (*foobar.private_mut()) += 1; - assert_eq!(*foobar.private(), 2); -} diff --git a/src/rust/smallstring/Cargo.toml b/src/rust/smallstring/Cargo.toml index d88521f65e28a96f95b545de767a419f256e3414..19a1f681e4217ab5c098e588f26be5a0baac413f 100644 --- a/src/rust/smallstring/Cargo.toml +++ b/src/rust/smallstring/Cargo.toml @@ -8,4 +8,5 @@ license = "MIT" edition.workspace = true [dependencies] -smallvec = { version = "^1", default-features = false } +smallvec.workspace = true +serde.workspace = true diff --git a/src/rust/smallstring/src/lib.rs b/src/rust/smallstring/src/lib.rs index 9fb47d7588420d860adec073f1db39aecc4a3abd..e76a1ae2e2b9888195b14c5f66abb17fe0cd5a24 100644 --- a/src/rust/smallstring/src/lib.rs +++ b/src/rust/smallstring/src/lib.rs @@ -8,7 +8,7 @@ use std::{ }; // TODO: FromIterator without having to allocate a String -#[derive(Clone, Default)] +#[derive(Clone, Default, serde::Serialize, serde::Deserialize)] pub struct SmallString<B: Array<Item = u8> = [u8; 8]> { buffer: SmallVec<B>, } @@ -94,9 +94,7 @@ impl<I: Iterator<Item = char>> Iterator for Utf8Iterator<I> { } } - let out = self.0.next(); - - out.and_then(|chr| { + self.0.next().and_then(|chr| { let mut dest = [0u8; 4]; let outstr = chr.encode_utf8(&mut dest); @@ -115,19 +113,14 @@ impl<I: Iterator<Item = char>> Iterator for Utf8Iterator<I> { fn size_hint(&self) -> (usize, Option<usize>) { let hint = self.0.size_hint(); - (hint.0, hint.1.map(|x| x * 4)) } } impl FromIterator<char> for SmallString { fn from_iter<T: IntoIterator<Item = char>>(into_iter: T) -> Self { - // We're a shell so we mostly work with ASCII data - optimise for this - // case since we have to optimise for _some_ fixed size of char. - let utf8 = Utf8Iterator::new(into_iter); - SmallString { - buffer: utf8.collect(), + buffer: Utf8Iterator::new(into_iter).collect(), } } } @@ -157,6 +150,8 @@ impl From<String> for SmallString { impl From<SmallString> for String { fn from(s: SmallString) -> String { + // We only allow `buffer` to be created from an existing valid string, + // so this is safe. unsafe { String::from_utf8_unchecked(s.buffer.into_vec()) } } }