chiark / gitweb /
QueuedBuf: Use educe to derive Default
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 13 Dec 2022 19:21:03 +0000 (19:21 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 14 Dec 2022 21:52:29 +0000 (21:52 +0000)
We are going to change the entry type E to Either, which isn't
Default, so the std derive will get the bounds wrong and fail to
derive Default for QueuedBuf.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Cargo.lock
Cargo.toml
src/prelude.rs
src/queue.rs

index 5200572139bd99e90ea74471729262e9dc5c9876..a63febabdf358ec0298f6b7dbaa3c8d53529cd76 100644 (file)
@@ -172,12 +172,38 @@ dependencies = [
  "crypto-common",
 ]
 
+[[package]]
+name = "educe"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb0188e3c3ba8df5753894d54461f0e39bc91741dc5b22e1c46999ec2c71f4e4"
+dependencies = [
+ "enum-ordinalize",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
 [[package]]
 name = "either"
 version = "1.8.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797"
 
+[[package]]
+name = "enum-ordinalize"
+version = "3.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a62bb1df8b45ecb7ffa78dca1c17a438fb193eb083db0b1b494d2a61bcb5096a"
+dependencies = [
+ "num-bigint",
+ "num-traits",
+ "proc-macro2",
+ "quote",
+ "rustc_version",
+ "syn",
+]
+
 [[package]]
 name = "env_logger"
 version = "0.9.1"
@@ -433,6 +459,7 @@ dependencies = [
  "backtrace",
  "base64",
  "cervine",
+ "educe",
  "env_logger",
  "extend",
  "eyre",
@@ -742,6 +769,36 @@ dependencies = [
  "pin-utils",
 ]
 
+[[package]]
+name = "num-bigint"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+dependencies = [
+ "autocfg",
+]
+
 [[package]]
 name = "num_cpus"
 version = "1.13.1"
@@ -945,6 +1002,15 @@ version = "0.1.21"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342"
 
+[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver",
+]
+
 [[package]]
 name = "schannel"
 version = "0.1.20"
@@ -984,6 +1050,12 @@ dependencies = [
  "libc",
 ]
 
+[[package]]
+name = "semver"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e25dfac463d778e353db5be2449d1cce89bd6fd23c9f1ea21310ce6e5a1b29c4"
+
 [[package]]
 name = "sha2"
 version = "0.10.6"
index f0ae298855cb3e35f4cc6a15042d54f265dfd4af..d14329d3af22c621fab904dce61d378ad6f2d555 100644 (file)
@@ -31,6 +31,7 @@ hippotat-macros = { version = "1.0.0", path = "macros" }
 # (or currently available):
 backtrace = "0.3"
 base64 = "0.13"
+educe = "0.4"
 env_logger = "0.9"
 futures = "0.3"
 heck = "0.4"
index 9f461c78d37d2c3c0cf76ab9dd9d0a7198ea70db..9fb30d54f95ad99ab5d3011aadb0c812292c5665 100644 (file)
@@ -26,6 +26,7 @@ pub use std::task::Poll;
 pub use std::time::{SystemTime, UNIX_EPOCH};
 
 pub use cervine::Cow as Cervine;
+pub use educe::Educe;
 pub use extend::ext;
 pub use fehler::{throw, throws};
 pub use futures::{poll, future, FutureExt, StreamExt, TryStreamExt};
index 44b2c85989ccaedfcc28289f05734a421de21de5..bdcd791f47c5ed20629cac1a0b6f2ef926cd849e 100644 (file)
@@ -32,7 +32,8 @@ impl<D> PacketQueue<D> where D: AsRef<[u8]> {
   pub fn peek_front(&self) -> Option<&D> { self.queue.front() }
 }
 
-#[derive(Default,Clone)]
+#[derive(Educe,Clone)]
+#[educe(Default)]
 pub struct QueueBuf<E> {
   content: usize,
   eaten1: usize, // 0 <= eaten1 < queue.front()...len()