Extract libmicrodroid_metadata (rust_library)

from microdroid_manager. Virtualizationservice will use it to make a
payload disk image.

Bug: 190503456
Test: m
Change-Id: Ifd7d2ef60b7a63dcc373a78dbcbe26f472dc1bc7
diff --git a/microdroid_manager/Android.bp b/microdroid_manager/Android.bp
index 30f8481..b0c25e0 100644
--- a/microdroid_manager/Android.bp
+++ b/microdroid_manager/Android.bp
@@ -13,7 +13,7 @@
         "libanyhow",
         "libkeystore2_system_property-rust",
         "liblog_rust",
-        "libmicrodroid_metadata_proto_rust",
+        "libmicrodroid_metadata",
         "libmicrodroid_payload_config",
         "libprotobuf",
         "libserde_json",
diff --git a/microdroid_manager/src/metadata.rs b/microdroid_manager/src/metadata.rs
index 4f7d7af..81d9cc4 100644
--- a/microdroid_manager/src/metadata.rs
+++ b/microdroid_manager/src/metadata.rs
@@ -15,25 +15,14 @@
 //! Payload metadata from /dev/block/by-name/metadata
 
 use log::info;
-use microdroid_metadata::metadata::Metadata;
-use protobuf::Message;
+use microdroid_metadata::{read_metadata, Metadata};
 use std::fs::File;
 use std::io;
-use std::io::Read;
 
 const METADATA_PATH: &str = "/dev/block/by-name/metadata";
 
 /// loads payload metadata from /dev/block/by-name/metadata
 pub fn load() -> io::Result<Metadata> {
     info!("loading payload metadata...");
-
-    let mut f = File::open(METADATA_PATH)?;
-    // metadata partition is
-    //  4 bytes : size(N) in big endian
-    //  N bytes : message for Metadata
-    let mut buf = [0u8; 4];
-    f.read_exact(&mut buf)?;
-    let size = i32::from_be_bytes(buf);
-
-    Ok(Metadata::parse_from_reader(&mut f.take(size as u64))?)
+    read_metadata(File::open(METADATA_PATH)?)
 }