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/y2016/control_loops/shooter/shooter.cc b/y2016/control_loops/shooter/shooter.cc
index 8b719c3..d317d4f 100644
--- a/y2016/control_loops/shooter/shooter.cc
+++ b/y2016/control_loops/shooter/shooter.cc
@@ -186,12 +186,12 @@
       output_builder.add_push_to_shooter(shoot);
     }
 
-    output->Send(output_builder.Finish());
+    output->CheckOk(output->Send(output_builder.Finish()));
   }
 
   status_builder.add_shots(shots_);
 
-  status->Send(status_builder.Finish());
+  (void)status->Send(status_builder.Finish());
 }
 
 }  // namespace shooter
diff --git a/y2016/control_loops/shooter/shooter_lib_test.cc b/y2016/control_loops/shooter/shooter_lib_test.cc
index 6934a75..46b96c0 100644
--- a/y2016/control_loops/shooter/shooter_lib_test.cc
+++ b/y2016/control_loops/shooter/shooter_lib_test.cc
@@ -76,7 +76,8 @@
 
     position_builder.add_theta_left(shooter_plant_left_->Y(0, 0));
     position_builder.add_theta_right(shooter_plant_right_->Y(0, 0));
-    builder.Send(position_builder.Finish());
+    EXPECT_EQ(builder.Send(position_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   void set_left_voltage_offset(double voltage_offset) {
@@ -172,7 +173,8 @@
     auto builder = shooter_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
     goal_builder.add_angular_velocity(0.0);
-    EXPECT_TRUE(builder.Send(goal_builder.Finish()));
+    EXPECT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   RunFor(dt() * 3 / 2);
@@ -193,7 +195,8 @@
     auto builder = shooter_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
     goal_builder.add_angular_velocity(450.0);
-    EXPECT_TRUE(builder.Send(goal_builder.Finish()));
+    EXPECT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   RunFor(chrono::seconds(1));
@@ -204,7 +207,8 @@
     auto builder = shooter_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
     goal_builder.add_angular_velocity(0.0);
-    EXPECT_TRUE(builder.Send(goal_builder.Finish()));
+    EXPECT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   // Make sure we don't apply voltage on spin-down.
@@ -230,7 +234,8 @@
     auto builder = shooter_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
     goal_builder.add_angular_velocity(20.0);
-    EXPECT_TRUE(builder.Send(goal_builder.Finish()));
+    EXPECT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
   // Cause problems by adding a voltage error on one side.
   shooter_plant_.set_right_voltage_offset(-4.0);
@@ -267,7 +272,8 @@
     auto builder = shooter_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
     goal_builder.add_angular_velocity(200.0);
-    EXPECT_TRUE(builder.Send(goal_builder.Finish()));
+    EXPECT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
   RunFor(chrono::seconds(5));
   EXPECT_TRUE(shooter_output_fetcher_.Fetch());
diff --git a/y2016/control_loops/superstructure/superstructure.cc b/y2016/control_loops/superstructure/superstructure.cc
index 3ee7730..88dfd93 100644
--- a/y2016/control_loops/superstructure/superstructure.cc
+++ b/y2016/control_loops/superstructure/superstructure.cc
@@ -742,7 +742,7 @@
       output_struct.traverse_down = unsafe_goal->traverse_down();
     }
 
-    output->Send(Output::Pack(*output->fbb(), &output_struct));
+    output->CheckOk(output->Send(Output::Pack(*output->fbb(), &output_struct)));
   }
 
   // Save debug/internal state.
@@ -827,7 +827,7 @@
   status_builder.add_state(state_);
   status_builder.add_is_collided(is_collided);
 
-  status->Send(status_builder.Finish());
+  (void)status->Send(status_builder.Finish());
 
   last_state_ = state_before_switch;
 }
diff --git a/y2016/control_loops/superstructure/superstructure_lib_test.cc b/y2016/control_loops/superstructure/superstructure_lib_test.cc
index 49ae033..12ef0a2 100644
--- a/y2016/control_loops/superstructure/superstructure_lib_test.cc
+++ b/y2016/control_loops/superstructure/superstructure_lib_test.cc
@@ -166,7 +166,8 @@
     position_builder.add_shoulder(shoulder_offset);
     position_builder.add_wrist(wrist_offset);
 
-    builder.Send(position_builder.Finish());
+    EXPECT_EQ(builder.Send(position_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   double shoulder_angle() const { return arm_plant_->X(0, 0); }
@@ -417,7 +418,8 @@
     goal_builder.add_max_angular_acceleration_intake(20);
     goal_builder.add_max_angular_acceleration_shoulder(20);
     goal_builder.add_max_angular_acceleration_wrist(20);
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   RunFor(chrono::seconds(5));
@@ -440,7 +442,8 @@
     goal_builder.add_max_angular_acceleration_shoulder(20);
     goal_builder.add_max_angular_velocity_wrist(20);
     goal_builder.add_max_angular_acceleration_wrist(20);
-    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.
@@ -466,7 +469,8 @@
     goal_builder.add_max_angular_acceleration_shoulder(20);
     goal_builder.add_max_angular_velocity_wrist(20);
     goal_builder.add_max_angular_acceleration_wrist(20);
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
   RunFor(chrono::seconds(10));
 
@@ -493,7 +497,8 @@
     goal_builder.add_max_angular_acceleration_shoulder(20);
     goal_builder.add_max_angular_velocity_wrist(20);
     goal_builder.add_max_angular_acceleration_wrist(20);
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   RunFor(chrono::seconds(10));
@@ -521,7 +526,8 @@
     goal_builder.add_max_angular_acceleration_shoulder(20);
     goal_builder.add_max_angular_velocity_wrist(20);
     goal_builder.add_max_angular_acceleration_wrist(20);
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   RunFor(chrono::seconds(10));
@@ -550,7 +556,8 @@
     goal_builder.add_max_angular_acceleration_shoulder(20);
     goal_builder.add_max_angular_velocity_wrist(20);
     goal_builder.add_max_angular_acceleration_wrist(20);
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   RunFor(chrono::seconds(10));
@@ -585,7 +592,8 @@
     goal_builder.add_angle_shoulder(constants::Values::kShoulderRange.upper);
     goal_builder.add_angle_wrist(constants::Values::kWristRange.upper +
                                  constants::Values::kShoulderRange.upper);
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
   // We have to wait for it to put the elevator in a safe position as well.
   RunFor(chrono::seconds(15));
@@ -608,7 +616,8 @@
     goal_builder.add_angle_intake(constants::Values::kIntakeRange.lower);
     goal_builder.add_angle_shoulder(constants::Values::kShoulderRange.lower);
     goal_builder.add_angle_wrist(0.0);
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
   // We have to wait for it to put the superstructure in a safe position as
   // well.
@@ -633,7 +642,8 @@
     goal_builder.add_angle_intake(constants::Values::kIntakeRange.lower + 0.3);
     goal_builder.add_angle_shoulder(constants::Values::kShoulderRange.upper);
     goal_builder.add_angle_wrist(0.0);
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
   RunFor(chrono::seconds(15));
 
@@ -659,7 +669,8 @@
     goal_builder.add_angle_shoulder(constants::Values::kShoulderRange.lower +
                                     0.03);
     goal_builder.add_angle_wrist(constants::Values::kWristRange.lower + 0.03);
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   RunFor(chrono::milliseconds(100));
@@ -697,7 +708,8 @@
     goal_builder.add_max_angular_acceleration_shoulder(20);
     goal_builder.add_max_angular_velocity_wrist(20);
     goal_builder.add_max_angular_acceleration_wrist(20);
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   // Expected states to cycle through and check in order.
@@ -769,7 +781,8 @@
     goal_builder.add_max_angular_acceleration_shoulder(20);
     goal_builder.add_max_angular_velocity_wrist(20);
     goal_builder.add_max_angular_acceleration_wrist(20);
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   // Expected states to cycle through and check in order.
@@ -846,7 +859,8 @@
     goal_builder.add_angle_intake(0.0);
     goal_builder.add_angle_shoulder(0.0);
     goal_builder.add_angle_wrist(0.0);
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   RunFor(chrono::seconds(8));
@@ -870,7 +884,8 @@
     goal_builder.add_angle_shoulder(
         constants::Values::kShoulderEncoderIndexDifference * 10);
     goal_builder.add_angle_wrist(0.0);
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   // Run disabled for 2 seconds
@@ -925,7 +940,8 @@
     goal_builder.add_max_angular_acceleration_shoulder(20);
     goal_builder.add_max_angular_velocity_wrist(20);
     goal_builder.add_max_angular_acceleration_wrist(20);
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   RunFor(chrono::seconds(6));
@@ -945,7 +961,8 @@
     goal_builder.add_max_angular_acceleration_shoulder(1);
     goal_builder.add_max_angular_velocity_wrist(1);
     goal_builder.add_max_angular_acceleration_wrist(1);
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   // TODO(austin): The profile isn't feasible, so when we try to track it, we
@@ -974,7 +991,8 @@
     goal_builder.add_max_angular_acceleration_shoulder(20);
     goal_builder.add_max_angular_velocity_wrist(20);
     goal_builder.add_max_angular_acceleration_wrist(20);
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   RunFor(chrono::seconds(6));
@@ -994,7 +1012,8 @@
     goal_builder.add_max_angular_acceleration_shoulder(1);
     goal_builder.add_max_angular_velocity_wrist(1);
     goal_builder.add_max_angular_acceleration_wrist(1);
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   superstructure_plant_.set_peak_intake_acceleration(1.20);
@@ -1021,7 +1040,8 @@
     goal_builder.add_max_angular_acceleration_shoulder(20);
     goal_builder.add_max_angular_velocity_wrist(20);
     goal_builder.add_max_angular_acceleration_wrist(20);
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   RunFor(chrono::seconds(6));
@@ -1042,7 +1062,8 @@
     goal_builder.add_max_angular_acceleration_shoulder(1);
     goal_builder.add_max_angular_velocity_wrist(1);
     goal_builder.add_max_angular_acceleration_wrist(1);
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   superstructure_plant_.set_peak_intake_acceleration(1.05);
@@ -1070,7 +1091,8 @@
     goal_builder.add_max_angular_acceleration_shoulder(20);
     goal_builder.add_max_angular_velocity_wrist(20);
     goal_builder.add_max_angular_acceleration_wrist(20);
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   RunFor(chrono::seconds(6));
@@ -1091,7 +1113,8 @@
     goal_builder.add_max_angular_acceleration_shoulder(100);
     goal_builder.add_max_angular_velocity_wrist(1);
     goal_builder.add_max_angular_acceleration_wrist(100);
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   superstructure_plant_.set_peak_intake_velocity(4.65);
@@ -1118,7 +1141,8 @@
     goal_builder.add_max_angular_acceleration_shoulder(20);
     goal_builder.add_max_angular_velocity_wrist(20);
     goal_builder.add_max_angular_acceleration_wrist(20);
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   RunFor(chrono::seconds(6));
@@ -1138,7 +1162,8 @@
     goal_builder.add_max_angular_acceleration_shoulder(20);
     goal_builder.add_max_angular_velocity_wrist(1);
     goal_builder.add_max_angular_acceleration_wrist(100);
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   superstructure_plant_.set_peak_intake_velocity(1.0);
@@ -1166,7 +1191,8 @@
     goal_builder.add_max_angular_acceleration_shoulder(20);
     goal_builder.add_max_angular_velocity_wrist(20);
     goal_builder.add_max_angular_acceleration_wrist(20);
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   RunFor(chrono::seconds(6));
@@ -1187,7 +1213,8 @@
     goal_builder.add_max_angular_acceleration_shoulder(1.0);
     goal_builder.add_max_angular_velocity_wrist(10.0);
     goal_builder.add_max_angular_acceleration_wrist(160.0);
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   superstructure_plant_.set_peak_intake_velocity(1.0);
@@ -1215,7 +1242,8 @@
     goal_builder.add_angle_shoulder(
         constants::Values::kShoulderRange.lower);  // Down
     goal_builder.add_angle_wrist(0.0);             // Stowed
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   RunFor(chrono::seconds(15));
@@ -1227,7 +1255,8 @@
         constants::Values::kIntakeRange.upper);   // stowed
     goal_builder.add_angle_shoulder(M_PI / 4.0);  // in the collision area
     goal_builder.add_angle_wrist(M_PI / 2.0);     // down
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   RunFor(chrono::seconds(5));
@@ -1259,7 +1288,8 @@
         constants::Values::kIntakeRange.upper);   // stowed
     goal_builder.add_angle_shoulder(M_PI / 2.0);  // in the collision area
     goal_builder.add_angle_wrist(M_PI);           // forward
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   RunFor(chrono::seconds(5));
@@ -1280,7 +1310,8 @@
     goal_builder.add_angle_intake(0.0);
     goal_builder.add_angle_shoulder(0.0);
     goal_builder.add_angle_wrist(M_PI);  // intentionally asking for forward
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   RunFor(chrono::seconds(15));
@@ -1307,7 +1338,8 @@
     goal_builder.add_angle_intake(0.0);
     goal_builder.add_angle_shoulder(M_PI * 0.5);
     goal_builder.add_angle_wrist(0.0);
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   RunFor(chrono::seconds(6));
@@ -1348,7 +1380,8 @@
     goal_builder.add_angle_intake(0.0);
     goal_builder.add_angle_shoulder(constants::Values::kShoulderRange.lower);
     goal_builder.add_angle_wrist(0.0);
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   RunFor(chrono::seconds(6));
@@ -1392,7 +1425,8 @@
     goal_builder.add_angle_intake(0.0);
     goal_builder.add_angle_shoulder(constants::Values::kShoulderRange.lower);
     goal_builder.add_angle_wrist(0.0);  // intentionally asking for forward
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   RunFor(chrono::seconds(6));
@@ -1421,7 +1455,8 @@
     goal_builder.add_angle_intake(0.0);
     goal_builder.add_angle_shoulder(M_PI * 0.25);
     goal_builder.add_angle_wrist(0.0);
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
   RunFor(chrono::seconds(8));
 
@@ -1438,7 +1473,8 @@
     goal_builder.add_max_angular_acceleration_shoulder(20);
     goal_builder.add_max_angular_velocity_wrist(20);
     goal_builder.add_max_angular_acceleration_wrist(20);
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   // Wait until we hit the transition point.
@@ -1462,7 +1498,8 @@
     goal_builder.add_angle_intake(0.0);
     goal_builder.add_angle_shoulder(0.0);
     goal_builder.add_angle_wrist(0.0);
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
   RunFor(chrono::seconds(8));
 
@@ -1479,7 +1516,8 @@
     goal_builder.add_max_angular_acceleration_shoulder(20);
     goal_builder.add_max_angular_velocity_wrist(20);
     goal_builder.add_max_angular_acceleration_wrist(20);
-    ASSERT_TRUE(builder.Send(goal_builder.Finish()));
+    ASSERT_EQ(builder.Send(goal_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
   // Wait until we hit the transition point.