chiark / gitweb /
Repro
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 11 May 2022 13:58:34 +0000 (14:58 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 11 May 2022 13:58:34 +0000 (14:58 +0100)
src/main.rs

index d5e3d219c5b66d197b9151ccb5fd11ac24d2def8..2fc1fe7a0c5a31d1eefe46d5fb3ad28da0125005 100644 (file)
@@ -1,28 +1,35 @@
 #![allow(dead_code)]
-#![allow(unused_mut)]
-#![allow(unused_imports)]
 
-use derive_builder::Builder;
-use std::io;
+struct Microdesc;
 
-use serde::{Serialize, Deserialize};
+struct State {
+    change: Vec<Microdesc>,
+}
 
-#[derive(Builder,Debug)]
-#[builder(derive(Debug))]
-struct Contains {
-    #[builder(sub_builder)]
-    things: Vec<u32>,
+enum NetDirChange<'a> {
+    AddMicrodescs(&'a mut Vec<Microdesc>),
 }
 
-#[derive(Debug,Default,Clone)]
-struct VecBuilder<T>(Option<Vec<T>>);
+fn netdir_add_microdesc(_: Microdesc) { }
+
+impl State {
+    fn get_netdir_change(&mut self) -> Option<NetDirChange<'_>> {
+        Some(NetDirChange::AddMicrodescs(&mut self.change))
+    }
+}    
 
-impl VecBuilder<u32> {
-    fn build(&self) -> Result<Vec<u32>, io::Error> { Ok(vec![]) }
+fn apply_netdir_changes(mut state: State) {
+    if let Some(change) = state.get_netdir_change() {
+        match change {
+            NetDirChange::AddMicrodescs(mds) => {
+                for md in mds.drain(..) {
+                    netdir_add_microdesc(md);
+                }
+            }
+        }
+    }
 }
 
 fn main() {
-    let cb = ContainsBuilder::default();
-    let c = cb.build();
-    println!("cb={cb:?} c={c:?}");
+    
 }