Struct fuchsia_pkg::MetaContents
source · pub struct MetaContents { /* private fields */ }
Expand description
A MetaContents
represents the “meta/contents” file of a Fuchsia archive
file of a Fuchsia package.
It validates that all resource paths are valid and that none of them start
with “meta/”.
Implementations§
source§impl MetaContents
impl MetaContents
pub const PATH: &'static str = "meta/contents"
sourcepub fn from_map(map: HashMap<String, Hash>) -> Result<Self, MetaContentsError>
pub fn from_map(map: HashMap<String, Hash>) -> Result<Self, MetaContentsError>
Creates a MetaContents
from a map
from resource paths to Merkle roots.
Validates that:
- all resource paths are valid Fuchsia package resource paths,
- none of the resource paths start with “meta/”,
- none of the resource paths are “meta”,
- none of the resource paths have directories that collide with other full resource paths, e.g. path combination [“foo”, “foo/bar”] would be rejected because it has both a file and a directory at path “foo”.
§Examples
let map = hashmap! {
"bin/my_prog".to_string() =>
Hash::from_str(
"0000000000000000000000000000000000000000000000000000000000000000")
.unwrap(),
"lib/mylib.so".to_string() =>
Hash::from_str(
"1111111111111111111111111111111111111111111111111111111111111111")
.unwrap(),
};
let meta_contents = MetaContents::from_map(map).unwrap();
sourcepub fn serialize(&self, writer: &mut impl Write) -> Result<()>
pub fn serialize(&self, writer: &mut impl Write) -> Result<()>
Serializes a “meta/contents” file to writer
.
§Examples
let map = hashmap! {
"bin/my_prog".to_string() =>
Hash::from_str(
"0000000000000000000000000000000000000000000000000000000000000000")
.unwrap(),
"lib/mylib.so".to_string() =>
Hash::from_str(
"1111111111111111111111111111111111111111111111111111111111111111")
.unwrap(),
};
let meta_contents = MetaContents::from_map(map).unwrap();
let mut bytes = Vec::new();
meta_contents.serialize(&mut bytes).unwrap();
let expected = "bin/my_prog=0000000000000000000000000000000000000000000000000000000000000000\n\
lib/mylib.so=1111111111111111111111111111111111111111111111111111111111111111\n";
assert_eq!(bytes.as_slice(), expected.as_bytes());
sourcepub fn deserialize(reader: impl BufRead) -> Result<Self, MetaContentsError>
pub fn deserialize(reader: impl BufRead) -> Result<Self, MetaContentsError>
Deserializes a “meta/contents” file from a reader
.
§Examples
let bytes = "bin/my_prog=0000000000000000000000000000000000000000000000000000000000000000\n\
lib/mylib.so=1111111111111111111111111111111111111111111111111111111111111111\n".as_bytes();
let meta_contents = MetaContents::deserialize(bytes).unwrap();
let expected_contents = hashmap! {
"bin/my_prog".to_string() =>
Hash::from_str(
"0000000000000000000000000000000000000000000000000000000000000000")
.unwrap(),
"lib/mylib.so".to_string() =>
Hash::from_str(
"1111111111111111111111111111111111111111111111111111111111111111")
.unwrap(),
};
assert_eq!(meta_contents.contents(), &expected_contents);
sourcepub fn contents(&self) -> &HashMap<String, Hash>
pub fn contents(&self) -> &HashMap<String, Hash>
Get the map from blob resource paths to Merkle Tree root hashes.
sourcepub fn into_contents(self) -> HashMap<String, Hash>
pub fn into_contents(self) -> HashMap<String, Hash>
Take the map from blob resource paths to Merkle Tree root hashes.
sourcepub fn into_hashes_undeduplicated(self) -> impl Iterator<Item = Hash>
pub fn into_hashes_undeduplicated(self) -> impl Iterator<Item = Hash>
Take the Merkle Tree root hashes in a iterator. The returned iterator may include duplicates.
Trait Implementations§
source§impl Clone for MetaContents
impl Clone for MetaContents
source§fn clone(&self) -> MetaContents
fn clone(&self) -> MetaContents
Returns a copy of the value. Read more
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moresource§impl Debug for MetaContents
impl Debug for MetaContents
source§impl PartialEq for MetaContents
impl PartialEq for MetaContents
source§fn eq(&self, other: &MetaContents) -> bool
fn eq(&self, other: &MetaContents) -> bool
This method tests for
self
and other
values to be equal, and is used
by ==
.impl Eq for MetaContents
impl StructuralPartialEq for MetaContents
Auto Trait Implementations§
impl Freeze for MetaContents
impl RefUnwindSafe for MetaContents
impl Send for MetaContents
impl Sync for MetaContents
impl Unpin for MetaContents
impl UnwindSafe for MetaContents
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§default unsafe fn clone_to_uninit(&self, dst: *mut T)
default unsafe fn clone_to_uninit(&self, dst: *mut T)
🔬This is a nightly-only experimental API. (
clone_to_uninit
)