Create an enum for sender errors

Will replace usages of bools, and will now currently only be used
for indicating that messages were sent too fast

After we merge this commit we will replace this enum with a general
Status class for all of aos, similar to absl::Status.

Change-Id: I4b5b2e7685744b3c6826a241cd3c84190eaa96ee
Signed-off-by: milind-u <milind.upadhyay@gmail.com>
diff --git a/y2019/control_loops/drivetrain/localized_drivetrain_test.cc b/y2019/control_loops/drivetrain/localized_drivetrain_test.cc
index 485dff6..4d6f84a 100644
--- a/y2019/control_loops/drivetrain/localized_drivetrain_test.cc
+++ b/y2019/control_loops/drivetrain/localized_drivetrain_test.cc
@@ -160,8 +160,10 @@
            ::std::get<0>(camera_delay_queue_.front()) <
                monotonic_now() - camera_latency) {
       auto builder = camera_sender_.MakeBuilder();
-      ASSERT_TRUE(builder.Send(CameraFrame::Pack(
-          *builder.fbb(), ::std::get<1>(camera_delay_queue_.front()).get())));
+      ASSERT_EQ(builder.Send(CameraFrame::Pack(
+                    *builder.fbb(),
+                    ::std::get<1>(camera_delay_queue_.front()).get())),
+                aos::RawSender::Error::kOk);
       camera_delay_queue_.pop();
     }
   }
@@ -216,7 +218,8 @@
     drivetrain_builder.add_left_goal(-1.0);
     drivetrain_builder.add_right_goal(1.0);
 
-    EXPECT_TRUE(builder.Send(drivetrain_builder.Finish()));
+    EXPECT_EQ(builder.Send(drivetrain_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
   RunFor(chrono::seconds(3));
   VerifyNearGoal();
@@ -237,7 +240,8 @@
     drivetrain_builder.add_left_goal(-1.0);
     drivetrain_builder.add_right_goal(1.0);
 
-    EXPECT_TRUE(builder.Send(drivetrain_builder.Finish()));
+    EXPECT_EQ(builder.Send(drivetrain_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
   RunFor(chrono::seconds(3));
   VerifyNearGoal();
@@ -257,7 +261,8 @@
     drivetrain_builder.add_left_goal(-1.0);
     drivetrain_builder.add_right_goal(1.0);
 
-    EXPECT_TRUE(builder.Send(drivetrain_builder.Finish()));
+    EXPECT_EQ(builder.Send(drivetrain_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
   RunFor(chrono::seconds(3));
   VerifyNearGoal();
@@ -279,7 +284,8 @@
     drivetrain_builder.add_left_goal(-1.0);
     drivetrain_builder.add_right_goal(1.0);
 
-    EXPECT_TRUE(builder.Send(drivetrain_builder.Finish()));
+    EXPECT_EQ(builder.Send(drivetrain_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
   RunFor(chrono::seconds(3));
   // VerifyNearGoal succeeds because it is just checking wheel positions:
@@ -308,7 +314,8 @@
     drivetrain_builder.add_left_goal(-1.0);
     drivetrain_builder.add_right_goal(1.0);
 
-    EXPECT_TRUE(builder.Send(drivetrain_builder.Finish()));
+    EXPECT_EQ(builder.Send(drivetrain_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   {
@@ -321,7 +328,8 @@
     localizer_control_builder.add_y(drivetrain_plant_.state().y());
     localizer_control_builder.add_theta(drivetrain_plant_.state()(2, 0));
 
-    EXPECT_TRUE(builder.Send(localizer_control_builder.Finish()));
+    EXPECT_EQ(builder.Send(localizer_control_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
   RunFor(chrono::seconds(3));
   VerifyNearGoal();
@@ -344,7 +352,8 @@
     drivetrain_builder.add_left_goal(-1.0);
     drivetrain_builder.add_right_goal(1.0);
 
-    EXPECT_TRUE(builder.Send(drivetrain_builder.Finish()));
+    EXPECT_EQ(builder.Send(drivetrain_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
   RunFor(chrono::seconds(5));
   VerifyNearGoal(4e-3);
@@ -373,7 +382,8 @@
         frc971::control_loops::drivetrain::ControllerType::LINE_FOLLOWER);
     drivetrain_builder.add_throttle(0.5);
 
-    EXPECT_TRUE(builder.Send(drivetrain_builder.Finish()));
+    EXPECT_EQ(builder.Send(drivetrain_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
   RunFor(chrono::seconds(6));
 
diff --git a/y2019/control_loops/drivetrain/target_selector_test.cc b/y2019/control_loops/drivetrain/target_selector_test.cc
index 5933f3f..f33224b 100644
--- a/y2019/control_loops/drivetrain/target_selector_test.cc
+++ b/y2019/control_loops/drivetrain/target_selector_test.cc
@@ -39,8 +39,7 @@
   TargetSelectorParamTest()
       : configuration_(aos::configuration::ReadConfig("y2019/config.json")),
         event_loop_factory_(&configuration_.message()),
-        event_loop_(
-            this->event_loop_factory_.MakeEventLoop("drivetrain")),
+        event_loop_(this->event_loop_factory_.MakeEventLoop("drivetrain")),
         test_event_loop_(this->event_loop_factory_.MakeEventLoop("test")),
         target_selector_hint_sender_(
             test_event_loop_->MakeSender<
@@ -82,12 +81,14 @@
         builder.MakeBuilder<superstructure::Goal>();
 
     goal_builder.add_suction(suction_offset);
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
   {
     auto builder = target_selector_hint_sender_.MakeBuilder();
-    ASSERT_TRUE(builder.Send(drivetrain::CreateTargetSelectorHint(
-        *builder.fbb(), GetParam().selection_hint)));
+    ASSERT_EQ(builder.Send(drivetrain::CreateTargetSelectorHint(
+                  *builder.fbb(), GetParam().selection_hint)),
+              aos::RawSender::Error::kOk);
   }
   bool expect_target = GetParam().expect_target;
   const State state = GetParam().state;
diff --git a/y2019/control_loops/superstructure/superstructure.cc b/y2019/control_loops/superstructure/superstructure.cc
index 9e7a5fe..e796f0b 100644
--- a/y2019/control_loops/superstructure/superstructure.cc
+++ b/y2019/control_loops/superstructure/superstructure.cc
@@ -119,7 +119,7 @@
       output_struct.intake_roller_voltage = 0.0;
     }
 
-    output->Send(Output::Pack(*output->fbb(), &output_struct));
+    output->CheckOk(output->Send(Output::Pack(*output->fbb(), &output_struct)));
   }
 
   if (unsafe_goal) {
@@ -196,7 +196,7 @@
     }
   }
 
-  status->Send(status_offset);
+  (void)status->Send(status_offset);
 }
 
 void Superstructure::SendColors(float red, float green, float blue) {
@@ -208,7 +208,8 @@
   status_light_builder.add_green(green);
   status_light_builder.add_blue(blue);
 
-  if (!builder.Send(status_light_builder.Finish())) {
+  if (builder.Send(status_light_builder.Finish()) !=
+      aos::RawSender::Error::kOk) {
     AOS_LOG(ERROR, "Failed to send lights.\n");
   }
 }
diff --git a/y2019/control_loops/superstructure/superstructure_lib_test.cc b/y2019/control_loops/superstructure/superstructure_lib_test.cc
index cabb4e2..d6b4f2d 100644
--- a/y2019/control_loops/superstructure/superstructure_lib_test.cc
+++ b/y2019/control_loops/superstructure/superstructure_lib_test.cc
@@ -7,6 +7,7 @@
 #include "frc971/control_loops/control_loop_test.h"
 #include "frc971/control_loops/position_sensor_sim.h"
 #include "frc971/control_loops/team_number_test_environment.h"
+#include "glog/logging.h"
 #include "gtest/gtest.h"
 #include "y2019/constants.h"
 #include "y2019/control_loops/superstructure/elevator/elevator_plant.h"
@@ -166,7 +167,8 @@
     position_builder.add_stilts(stilts_offset);
     position_builder.add_suction_pressure(simulated_pressure_);
 
-    builder.Send(position_builder.Finish());
+    CHECK_EQ(builder.Send(position_builder.Finish()),
+             aos::RawSender::Error::kOk);
   }
 
   double elevator_position() const { return elevator_plant_->X(0, 0); }
@@ -501,7 +503,8 @@
     goal_builder.add_intake(intake_offset);
     goal_builder.add_stilts(stilts_offset);
 
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
   RunFor(chrono::seconds(10));
   VerifyNearGoal();
@@ -550,7 +553,8 @@
     goal_builder.add_intake(intake_offset);
     goal_builder.add_stilts(stilts_offset);
 
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   // Give it a lot of time to get there.
@@ -593,7 +597,8 @@
     goal_builder.add_intake(intake_offset);
     goal_builder.add_stilts(stilts_offset);
 
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
   RunFor(chrono::seconds(8));
   VerifyNearGoal();
@@ -630,7 +635,8 @@
     goal_builder.add_intake(intake_offset);
     goal_builder.add_stilts(stilts_offset);
 
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
   superstructure_plant_.set_peak_elevator_velocity(23.0);
   superstructure_plant_.set_peak_elevator_acceleration(0.2);
@@ -682,7 +688,8 @@
     goal_builder.add_intake(intake_offset);
     goal_builder.add_stilts(stilts_offset);
 
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
   WaitUntilZeroed();
   VerifyNearGoal();
@@ -743,7 +750,8 @@
     goal_builder.add_intake(intake_offset);
     goal_builder.add_stilts(stilts_offset);
 
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   // Give it a lot of time to get there.
@@ -783,7 +791,8 @@
     goal_builder.add_stilts(stilts_offset);
     goal_builder.add_roller_voltage(6.0);
 
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   RunFor(chrono::seconds(5));
@@ -818,7 +827,8 @@
     goal_builder.add_stilts(stilts_offset);
     goal_builder.add_roller_voltage(6.0);
 
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   RunFor(chrono::seconds(5));
@@ -860,7 +870,8 @@
     goal_builder.add_stilts(stilts_offset);
     goal_builder.add_suction(suction_offset);
 
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   RunFor(Vacuum::kTimeAtHigherVoltage - chrono::milliseconds(10));
@@ -904,7 +915,8 @@
     goal_builder.add_stilts(stilts_offset);
     goal_builder.add_suction(suction_offset);
 
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   // Verify that at 0 pressure after short time voltage is still high
@@ -954,7 +966,8 @@
     goal_builder.add_stilts(stilts_offset);
     goal_builder.add_suction(suction_offset);
 
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   // Get a Gamepiece
@@ -991,7 +1004,8 @@
     goal_builder.add_stilts(stilts_offset);
     goal_builder.add_suction(suction_offset);
 
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   superstructure_plant_.set_simulated_pressure(1.0);