OSDN Git Service

rusty-gd: make RegistryBuilder follow the builder pattern
authorZach Johnson <zachoverflow@google.com>
Thu, 19 Nov 2020 21:05:53 +0000 (13:05 -0800)
committerZach Johnson <zachoverflow@google.com>
Tue, 1 Dec 2020 01:05:27 +0000 (17:05 -0800)
Bug: 171749953
Tag: #gd-refactor
Test: gd/cert/run --rhost SimpleHalTest
Change-Id: I0f32438926212a99a10d429922cc046d49b86860

gd/rust/facade/src/lib.rs
gd/rust/gddi-macros/src/lib.rs
gd/rust/gddi/src/lib.rs

index ff07180..a2ace15 100644 (file)
@@ -104,11 +104,7 @@ impl FacadeServiceManager {
             while let Some(cmd) = rx.recv().await {
                 match cmd {
                     LifecycleCommand::Start { req, done } => {
-                        let registry = {
-                            let mut builder = RegistryBuilder::new();
-                            builder.register_module(stack_module);
-                            Arc::new(builder.build())
-                        };
+                        let registry = Arc::new(RegistryBuilder::new().register_module(stack_module).build());
 
                         registry.inject(local_rt.clone()).await;
                         if let Some(rc_port) = rootcanal_port {
index 44d071f..dcb8512 100644 (file)
@@ -139,11 +139,12 @@ pub fn module(item: TokenStream) -> TokenStream {
     let submodule_idents = module.submodules.iter();
     let emitted_code = quote! {
         #[doc(hidden)]
-        pub fn #init_ident(builder: &mut gddi::RegistryBuilder) {
+        #[allow(missing_docs)]
+        pub fn #init_ident(builder: gddi::RegistryBuilder) -> gddi::RegistryBuilder {
             // Register all providers on this module
-            #(builder.register_provider::<#types>(Box::new(#provider_idents));)*
+            builder#(.register_provider::<#types>(Box::new(#provider_idents)))*
             // Register all submodules on this module
-            #(builder.register_module(#submodule_idents);)*
+            #(.register_module(#submodule_idents))*
         }
     };
     emitted_code.into()
index 7ae5c59..dcaba8b 100644 (file)
@@ -45,17 +45,19 @@ impl RegistryBuilder {
     }
 
     /// Registers a module with this registry
-    pub fn register_module<F>(&mut self, init: F)
+    pub fn register_module<F>(self, init: F) -> Self
     where
-        F: Fn(&mut Self),
+        F: Fn(Self) -> Self,
     {
-        init(self);
+        init(self)
     }
 
     /// Registers a provider function with this registry
-    pub fn register_provider<T: 'static>(&mut self, f: ProviderFnBox) {
+    pub fn register_provider<T: 'static>(mut self, f: ProviderFnBox) -> Self {
         self.providers
             .insert(TypeId::of::<T>(), Provider { f: Arc::new(f) });
+
+        self
     }
 
     /// Construct the Registry from this builder