From 63bad1fd2c82eadc88107003dd819f3cfa7530a2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Kat=20March=C3=A1n?= <kzm@zkat.tech>
Date: Mon, 26 Apr 2021 17:21:47 -0700
Subject: [PATCH] fix(scorers): Scorer builders now properly return themselves
 + some API changes

BREAKING CHANGE: All composite scorers now use push, instead of a weird push/when mixture. Additionally, they were previously (erroneously) returning &mut Self from push/when. This is now just Self, which means they will actually work now.
---
 src/actions.rs |  2 +-
 src/lib.rs     |  2 +-
 src/scorers.rs | 13 +++----------
 3 files changed, 5 insertions(+), 12 deletions(-)

diff --git a/src/actions.rs b/src/actions.rs
index 2e69efe..b569886 100644
--- a/src/actions.rs
+++ b/src/actions.rs
@@ -112,7 +112,7 @@ impl StepsBuilder {
     /**
     Adds an action step. Order matters.
     */
-    pub fn step(&mut self, action_builder: impl ActionBuilder + 'static) -> &mut Self {
+    pub fn step(mut self, action_builder: impl ActionBuilder + 'static) -> Self {
         self.steps.push(Arc::new(action_builder));
         self
     }
diff --git a/src/lib.rs b/src/lib.rs
index d8067d7..5174ba6 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -165,7 +165,7 @@ pub mod prelude {
     pub use super::BigBrainPlugin;
     pub use actions::{ActionBuilder, ActionState, Steps};
     pub use pickers::{FirstToScore, Picker};
-    pub use scorers::{AllOrNothing, FixedScore, Score, ScorerBuilder, SumOfScorers};
+    pub use scorers::{AllOrNothing, FixedScore, Score, ScorerBuilder, SumOfScorers, WinningScorer};
     pub use thinker::{Actor, Thinker, ThinkerBuilder};
 }
 
diff --git a/src/scorers.rs b/src/scorers.rs
index 17ab62e..b49b02b 100644
--- a/src/scorers.rs
+++ b/src/scorers.rs
@@ -163,7 +163,7 @@ impl AllOrNothingBuilder {
     /**
     Add another Scorer to this [`ScorerBuilder`].
      */
-    pub fn push(&mut self, scorer: impl ScorerBuilder + 'static) -> &mut Self {
+    pub fn push(mut self, scorer: impl ScorerBuilder + 'static) -> Self {
         self.scorers.push(Arc::new(scorer));
         self
     }
@@ -245,7 +245,7 @@ pub struct SumOfScorersBuilder {
 }
 
 impl SumOfScorersBuilder {
-    pub fn when(&mut self, scorer: impl ScorerBuilder + 'static) -> &mut Self {
+    pub fn push(mut self, scorer: impl ScorerBuilder + 'static) -> Self {
         self.scorers.push(Arc::new(scorer));
         self
     }
@@ -331,18 +331,11 @@ pub struct WinningScorerBuilder {
     scorers: Vec<Arc<dyn ScorerBuilder>>,
 }
 
-impl WinningScorerBuilder {
-    pub fn when(&mut self, scorer: impl ScorerBuilder + 'static) -> &mut Self {
-        self.scorers.push(Arc::new(scorer));
-        self
-    }
-}
-
 impl WinningScorerBuilder {
     /**
     Add another Scorer to this [`ScorerBuilder`].
      */
-    pub fn push(&mut self, scorer: impl ScorerBuilder + 'static) -> &mut Self {
+    pub fn push(mut self, scorer: impl ScorerBuilder + 'static) -> Self {
         self.scorers.push(Arc::new(scorer));
         self
     }
-- 
GitLab