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/actors/autonomous_actor.cc b/y2016/actors/autonomous_actor.cc
index c35612f..6401b27 100644
--- a/y2016/actors/autonomous_actor.cc
+++ b/y2016/actors/autonomous_actor.cc
@@ -120,7 +120,8 @@
   superstructure_goal_builder.add_voltage_climber(0.0);
   superstructure_goal_builder.add_unfold_climber(false);
 
-  if (!builder.Send(superstructure_goal_builder.Finish())) {
+  if (builder.Send(superstructure_goal_builder.Finish()) !=
+      aos::RawSender::Error::kOk) {
     AOS_LOG(ERROR, "Sending superstructure goal failed.\n");
   }
 }
@@ -135,7 +136,8 @@
   shooter_goal_builder.add_clamp_open(true);
   shooter_goal_builder.add_push_to_shooter(false);
   shooter_goal_builder.add_force_lights_on(false);
-  if (!builder.Send(shooter_goal_builder.Finish())) {
+  if (builder.Send(shooter_goal_builder.Finish()) !=
+      aos::RawSender::Error::kOk) {
     AOS_LOG(ERROR, "Sending shooter goal failed.\n");
   }
 }
@@ -150,8 +152,8 @@
   shooter_goal_builder.add_clamp_open(false);
   shooter_goal_builder.add_push_to_shooter(false);
   shooter_goal_builder.add_force_lights_on(false);
-
-  if (!builder.Send(shooter_goal_builder.Finish())) {
+  if (builder.Send(shooter_goal_builder.Finish()) !=
+      aos::RawSender::Error::kOk) {
     AOS_LOG(ERROR, "Sending shooter goal failed.\n");
   }
 }
@@ -171,7 +173,8 @@
   shooter_goal_builder.add_push_to_shooter(false);
   shooter_goal_builder.add_force_lights_on(force_lights_on);
 
-  if (!builder.Send(shooter_goal_builder.Finish())) {
+  if (builder.Send(shooter_goal_builder.Finish()) !=
+      aos::RawSender::Error::kOk) {
     AOS_LOG(ERROR, "Sending shooter goal failed.\n");
   }
 }
@@ -196,7 +199,8 @@
   shooter_goal_builder.add_push_to_shooter(true);
   shooter_goal_builder.add_force_lights_on(force_lights_on);
 
-  if (!builder.Send(shooter_goal_builder.Finish())) {
+  if (builder.Send(shooter_goal_builder.Finish()) !=
+      aos::RawSender::Error::kOk) {
     AOS_LOG(ERROR, "Sending shooter goal failed.\n");
   }
 
diff --git a/y2016/actors/superstructure_actor.cc b/y2016/actors/superstructure_actor.cc
index e193243..d33b125 100644
--- a/y2016/actors/superstructure_actor.cc
+++ b/y2016/actors/superstructure_actor.cc
@@ -72,7 +72,8 @@
   superstructure_goal_builder.add_voltage_climber(0.0);
   superstructure_goal_builder.add_unfold_climber(unfold_climber);
 
-  if (!builder.Send(superstructure_goal_builder.Finish())) {
+  if (builder.Send(superstructure_goal_builder.Finish()) !=
+      aos::RawSender::Error::kOk) {
     AOS_LOG(ERROR, "Sending superstructure move failed.\n");
   }
 }
diff --git a/y2016/actors/vision_align_actor.cc b/y2016/actors/vision_align_actor.cc
index 56a858c..cf50331 100644
--- a/y2016/actors/vision_align_actor.cc
+++ b/y2016/actors/vision_align_actor.cc
@@ -79,7 +79,8 @@
     goal_builder.add_left_goal(left_current + side_distance_change);
     goal_builder.add_right_goal(right_current - side_distance_change);
 
-    if (!builder.Send(goal_builder.Finish())) {
+    if (builder.Send(goal_builder.Finish()) !=
+        aos::RawSender::Error::kOk) {
       AOS_LOG(WARNING, "sending drivetrain goal failed\n");
     }
   }
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.
diff --git a/y2016/joystick_reader.cc b/y2016/joystick_reader.cc
index 974adf7..b235f64 100644
--- a/y2016/joystick_reader.cc
+++ b/y2016/joystick_reader.cc
@@ -381,7 +381,8 @@
         superstructure_builder.add_traverse_down(traverse_down_);
         superstructure_builder.add_force_intake(true);
 
-        if (!builder.Send(superstructure_builder.Finish())) {
+        if (builder.Send(superstructure_builder.Finish()) !=
+            aos::RawSender::Error::kOk) {
           AOS_LOG(ERROR, "Sending superstructure goal failed.\n");
         } else {
           AOS_LOG(DEBUG, "sending goals: intake: %f, shoulder: %f, wrist: %f\n",
@@ -399,7 +400,8 @@
         shooter_builder.add_force_lights_on(force_lights_on);
         shooter_builder.add_shooting_forwards(wrist_goal_ > 0);
 
-        if (!builder.Send(shooter_builder.Finish())) {
+        if (builder.Send(shooter_builder.Finish()) !=
+            aos::RawSender::Error::kOk) {
           AOS_LOG(ERROR, "Sending shooter goal failed.\n");
         }
       }
diff --git a/y2016/vision/target_receiver.cc b/y2016/vision/target_receiver.cc
index a762e4f..75a07a8 100644
--- a/y2016/vision/target_receiver.cc
+++ b/y2016/vision/target_receiver.cc
@@ -408,8 +408,9 @@
       }
 
       if (drivetrain_offset.CompleteVisionStatus(&new_vision_status)) {
-        if (!builder.Send(
-                VisionStatus::Pack(*builder.fbb(), &new_vision_status))) {
+        if (builder.Send(
+                VisionStatus::Pack(*builder.fbb(), &new_vision_status)) !=
+            aos::RawSender::Error::kOk) {
           AOS_LOG(ERROR, "Failed to send vision information\n");
         }
       } else {
diff --git a/y2016/wpilib_interface.cc b/y2016/wpilib_interface.cc
index e3d367c..0419950 100644
--- a/y2016/wpilib_interface.cc
+++ b/y2016/wpilib_interface.cc
@@ -276,7 +276,7 @@
       position_builder.add_right_shifter_position(
           hall_translate(drivetrain_right_hall_->GetVoltage()));
 
-      builder.Send(position_builder.Finish());
+      builder.CheckOk(builder.Send(position_builder.Finish()));
     }
   }
 
@@ -290,7 +290,7 @@
           shooter_translate(-shooter_left_encoder_->GetRaw()));
       shooter_builder.add_theta_right(
           shooter_translate(shooter_right_encoder_->GetRaw()));
-      builder.Send(shooter_builder.Finish());
+      builder.CheckOk(builder.Send(shooter_builder.Finish()));
     }
 
     {
@@ -321,7 +321,7 @@
       position_builder.add_shoulder(shoulder_offset);
       position_builder.add_wrist(wrist_offset);
 
-      builder.Send(position_builder.Finish());
+      builder.CheckOk(builder.Send(position_builder.Finish()));
     }
 
     {
@@ -329,7 +329,7 @@
       ::y2016::sensors::BallDetector::Builder ball_detector_builder =
           builder.MakeBuilder<y2016::sensors::BallDetector>();
       ball_detector_builder.add_voltage(ball_detector_->GetVoltage());
-      builder.Send(ball_detector_builder.Finish());
+      builder.CheckOk(builder.Send(ball_detector_builder.Finish()));
     }
 
     {
@@ -343,7 +343,7 @@
         }
       }
       auto_builder.add_mode(mode);
-      builder.Send(auto_builder.Finish());
+      builder.CheckOk(builder.Send(auto_builder.Finish()));
     }
   }
 
@@ -492,7 +492,7 @@
 
       pcm_->Flush();
       to_log_builder.add_read_solenoids(pcm_->GetAll());
-      builder.Send(to_log_builder.Finish());
+      (void)builder.Send(to_log_builder.Finish());
     }
   }