Build API: Add validation decorators.

Simplify the easy proto validation tasks by providing decorators
that can handle the simple validation cases.

BUG=None
TEST=run_tests

Change-Id: Ib799d43c7d0dca5312a58771ff67b610e9ff4f2c
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/1669636
Reviewed-by: Alex Klein <saklein@chromium.org>
Tested-by: Alex Klein <saklein@chromium.org>
Commit-Queue: Alex Klein <saklein@chromium.org>
Auto-Submit: Alex Klein <saklein@chromium.org>
diff --git a/api/controller/android.py b/api/controller/android.py
index 4dc55b8..cdbb9aa 100644
--- a/api/controller/android.py
+++ b/api/controller/android.py
@@ -9,11 +9,11 @@
 
 import os
 
+from chromite.api import validate
 from chromite.api.gen.chromite.api import android_pb2
 # TODO(crbug/904939): implement service/android.
 from chromite.cbuildbot import commands
 from chromite.lib import constants
-from chromite.lib import cros_build_lib
 from chromite.lib import osutils
 from chromite.lib import portage_util
 
@@ -24,6 +24,7 @@
                                     'package.mask', 'androidpin')
 
 
+@validate.require('tracking_branch', 'package_name', 'android_build_branch')
 def MarkStable(input_proto, output_proto):
   """Uprev Android, if able.
 
@@ -44,15 +45,6 @@
   boards = input_proto.boards
   buildroot = input_proto.buildroot
 
-  if not tracking_branch:
-    cros_build_lib.Die('Tracking_branch is required.')
-
-  if not package_name:
-    cros_build_lib.Die('Package_name is required.')
-
-  if not android_build_branch:
-    cros_build_lib.Die('Android_build_branch is required.')
-
   # Assume success.
   output_proto.status = android_pb2.MARK_STABLE_STATUS_SUCCESS
   # TODO(crbug/904939): This should move to service/android.py and the port
@@ -79,6 +71,7 @@
   else:
     output_proto.status = android_pb2.MARK_STABLE_STATUS_EARLY_EXIT
 
+
 def UnpinVersion(_input_proto, _output_proto):
   """Unpin the Android version.