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/actors/autonomous_actor.cc b/y2019/actors/autonomous_actor.cc
index 7622a64..ad5bd5b 100644
--- a/y2019/actors/autonomous_actor.cc
+++ b/y2019/actors/autonomous_actor.cc
@@ -98,7 +98,8 @@
     localizer_control_builder.add_y(1.35 * turn_scalar);
     localizer_control_builder.add_theta(M_PI);
     localizer_control_builder.add_theta_uncertainty(0.00001);
-    if (!builder.Send(localizer_control_builder.Finish())) {
+    if (builder.Send(localizer_control_builder.Finish()) !=
+        aos::RawSender::Error::kOk) {
       AOS_LOG(ERROR, "Failed to reset localizer.\n");
     }
   }
diff --git a/y2019/actors/autonomous_actor.h b/y2019/actors/autonomous_actor.h
index af2a60f..c0792b8 100644
--- a/y2019/actors/autonomous_actor.h
+++ b/y2019/actors/autonomous_actor.h
@@ -153,7 +153,8 @@
     superstructure_builder.add_intake(intake_offset);
     superstructure_builder.add_suction(suction_offset);
 
-    if (!builder.Send(superstructure_builder.Finish())) {
+    if (builder.Send(superstructure_builder.Finish()) !=
+        aos::RawSender::Error::kOk) {
       AOS_LOG(ERROR, "Sending superstructure goal failed.\n");
     }
   }
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);
diff --git a/y2019/joystick_reader.cc b/y2019/joystick_reader.cc
index a92dd90..51aeffb 100644
--- a/y2019/joystick_reader.cc
+++ b/y2019/joystick_reader.cc
@@ -283,7 +283,8 @@
               control_loops::drivetrain::SelectionHint::NONE);
         }
       }
-      if (!builder.Send(target_selector_hint_builder.Finish())) {
+      if (builder.Send(target_selector_hint_builder.Finish()) !=
+          aos::RawSender::Error::kOk) {
         AOS_LOG(ERROR, "Failed to send target selector hint.\n");
       }
     }
@@ -297,7 +298,8 @@
       localizer_control_builder.add_y(3.4);
       localizer_control_builder.add_keep_current_theta(true);
 
-      if (!builder.Send(localizer_control_builder.Finish())) {
+      if (builder.Send(localizer_control_builder.Finish()) !=
+          aos::RawSender::Error::kOk) {
         AOS_LOG(ERROR, "Failed to reset localizer.\n");
       }
     }
@@ -311,7 +313,8 @@
       localizer_control_builder.add_y(-3.4);
       localizer_control_builder.add_keep_current_theta(true);
 
-      if (!builder.Send(localizer_control_builder.Finish())) {
+      if (builder.Send(localizer_control_builder.Finish()) !=
+          aos::RawSender::Error::kOk) {
         AOS_LOG(ERROR, "Failed to reset localizer.\n");
       }
     }
@@ -325,7 +328,8 @@
       localizer_control_builder.add_y(3.4);
       localizer_control_builder.add_theta(0.0);
 
-      if (!builder.Send(localizer_control_builder.Finish())) {
+      if (builder.Send(localizer_control_builder.Finish()) !=
+          aos::RawSender::Error::kOk) {
         AOS_LOG(ERROR, "Failed to reset localizer.\n");
       }
     }
@@ -339,7 +343,8 @@
       localizer_control_builder.add_y(3.4);
       localizer_control_builder.add_theta(M_PI);
 
-      if (!builder.Send(localizer_control_builder.Finish())) {
+      if (builder.Send(localizer_control_builder.Finish()) !=
+          aos::RawSender::Error::kOk) {
         AOS_LOG(ERROR, "Failed to reset localizer.\n");
       }
     }
@@ -353,7 +358,8 @@
       localizer_control_builder.add_y(-3.4);
       localizer_control_builder.add_theta(0.0);
 
-      if (!builder.Send(localizer_control_builder.Finish())) {
+      if (builder.Send(localizer_control_builder.Finish()) !=
+          aos::RawSender::Error::kOk) {
         AOS_LOG(ERROR, "Failed to reset localizer.\n");
       }
     }
@@ -367,7 +373,8 @@
       localizer_control_builder.add_y(-3.4);
       localizer_control_builder.add_theta(M_PI);
 
-      if (!builder.Send(localizer_control_builder.Finish())) {
+      if (builder.Send(localizer_control_builder.Finish()) !=
+          aos::RawSender::Error::kOk) {
         AOS_LOG(ERROR, "Failed to reset localizer.\n");
       }
     }
@@ -599,7 +606,8 @@
     mutable_superstructure_goal->mutable_wrist()->mutate_unsafe_goal(
         elevator_wrist_pos_.wrist);
 
-    if (!main_superstructure_goal_builder.Send(superstructure_goal_offset)) {
+    if (main_superstructure_goal_builder.Send(superstructure_goal_offset) !=
+        aos::RawSender::Error::kOk) {
       AOS_LOG(ERROR, "Sending superstructure goal failed.\n");
     }
 
@@ -611,7 +619,8 @@
 
     {
       auto builder = camera_log_sender_.MakeBuilder();
-      builder.Send(CreateCameraLog(*builder.fbb(), data.IsPressed(kCameraLog)));
+      (void)builder.Send(
+          CreateCameraLog(*builder.fbb(), data.IsPressed(kCameraLog)));
     }
   }
 
diff --git a/y2019/wpilib_interface.cc b/y2019/wpilib_interface.cc
index 885bc12..da076f2 100644
--- a/y2019/wpilib_interface.cc
+++ b/y2019/wpilib_interface.cc
@@ -247,7 +247,7 @@
       drivetrain_builder.add_right_speed(-drivetrain_velocity_translate(
           drivetrain_right_encoder_->GetPeriod()));
 
-      builder.Send(drivetrain_builder.Finish());
+      builder.CheckOk(builder.Send(drivetrain_builder.Finish()));
     }
     const auto values = constants::GetValues();
 
@@ -308,7 +308,7 @@
       position_builder.add_platform_right_detect(
           !platform_right_detect_->Get());
 
-      builder.Send(position_builder.Finish());
+      builder.CheckOk(builder.Send(position_builder.Finish()));
     }
 
     {
@@ -326,7 +326,7 @@
 
       auto_mode_builder.add_mode(mode);
 
-      builder.Send(auto_mode_builder.Finish());
+      builder.CheckOk(builder.Send(auto_mode_builder.Finish()));
     }
   }
 
@@ -457,7 +457,7 @@
                   .time_since_epoch())
               .count());
       camera_frame_builder.add_camera(received.camera_index);
-      builder.Send(camera_frame_builder.Finish());
+      builder.CheckOk(builder.Send(camera_frame_builder.Finish()));
     }
 
     if (dummy_spi_) {
@@ -652,7 +652,7 @@
 
       pcm_.Flush();
       to_log_builder.add_read_solenoids(pcm_.GetAll());
-      builder.Send(to_log_builder.Finish());
+      (void)builder.Send(to_log_builder.Finish());
     }
 
     status_light_fetcher_.Fetch();