api: PackageIndexInfo deserialization

Add PackageIndexInfo deserialization function to controller_util.
Preparation for removing protobuf dependencies in lib/.

BUG=b:265998356
TEST=./run_test

Change-Id: Iac25771aa561839d887a935c7779dd95a1053dd4
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/4179353
Tested-by: Alex Klein <saklein@chromium.org>
Reviewed-by: Lizzy Presland <zland@google.com>
Commit-Queue: Alex Klein <saklein@chromium.org>
diff --git a/api/controller/controller_util.py b/api/controller/controller_util.py
index 8d1fd2d..59bccd7 100644
--- a/api/controller/controller_util.py
+++ b/api/controller/controller_util.py
@@ -12,6 +12,7 @@
 from chromite.api.gen.chromite.api import sysroot_pb2
 from chromite.api.gen.chromite.api import test_pb2
 from chromite.api.gen.chromiumos import common_pb2
+from chromite.lib import binpkg
 from chromite.lib import build_target_lib
 from chromite.lib import chroot_lib
 from chromite.lib import constants
@@ -183,6 +184,24 @@
     return [ParseBuildTarget(target) for target in repeated_build_target_field]
 
 
+def deserialize_profile(profile: common_pb2.Profile) -> sysroot_lib.Profile:
+    """Deserialize a portage profile message to a Profile object."""
+    return sysroot_lib.Profile(profile.name)
+
+
+def deserialize_package_index_info(
+    message: common_pb2.PackageIndexInfo,
+) -> binpkg.PackageIndexInfo:
+    """Deserialize a PackageIndexInfo message to an object."""
+    return binpkg.PackageIndexInfo(
+        snapshot_sha=message.snapshot_sha,
+        snapshot_number=message.snapshot_number,
+        build_target=ParseBuildTarget(message.build_target),
+        profile=deserialize_profile(message.profile),
+        location=message.location,
+    )
+
+
 def serialize_package_info(
     pkg_info: package_info.PackageInfo,
     pkg_info_msg: Union[common_pb2.PackageInfo, "portage_pb2.Portage.Package"],