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: PackedMap<str, Hash>) -> Result<Self, MetaContentsError>
pub fn from_map(map: PackedMap<str, 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 = PackedMap::from([
("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 get(&self, path: &str) -> Option<&Hash>
pub fn get(&self, path: &str) -> Option<&Hash>
Returns the Merkle root for the given resource path, if present.
Sourcepub fn values(&self) -> impl Iterator<Item = &Hash>
pub fn values(&self) -> impl Iterator<Item = &Hash>
Returns an iterator over the package hashes.
Sourcepub fn iter(&self) -> Iter<'_, str, Hash>
pub fn iter(&self) -> Iter<'_, str, Hash>
Returns an iterator over the entries of the map, sorted by key.
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 = PackedMap::from([
("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 = PackedMap::from([
("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) -> &PackedMap<str, Hash>
pub fn contents(&self) -> &PackedMap<str, Hash>
Get the map from blob resource paths to Merkle Tree root hashes.
Sourcepub fn into_contents(self) -> PackedMap<str, Hash>
pub fn into_contents(self) -> PackedMap<str, 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
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for MetaContents
impl Debug for MetaContents
Source§impl Default for MetaContents
impl Default for MetaContents
Source§impl<T, const N: usize> From<[(T, GenericDigest<FuchsiaMerkleMarker>); N]> for MetaContents
impl<T, const N: usize> From<[(T, GenericDigest<FuchsiaMerkleMarker>); N]> for MetaContents
Source§impl<T> FromIterator<(T, GenericDigest<FuchsiaMerkleMarker>)> for MetaContents
impl<T> FromIterator<(T, GenericDigest<FuchsiaMerkleMarker>)> for MetaContents
Source§impl<'a> IntoIterator for &'a MetaContents
impl<'a> IntoIterator for &'a MetaContents
Source§type Item = (&'a str, &'a GenericDigest<FuchsiaMerkleMarker>)
type Item = (&'a str, &'a GenericDigest<FuchsiaMerkleMarker>)
Source§type IntoIter = Iter<'a, str, GenericDigest<FuchsiaMerkleMarker>>
type IntoIter = Iter<'a, str, GenericDigest<FuchsiaMerkleMarker>>
Source§impl PartialEq for MetaContents
impl PartialEq for MetaContents
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 UnsafeUnpin 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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T, D> Encode<Ambiguous1, D> for Twhere
D: ResourceDialect,
impl<T, D> Encode<Ambiguous1, D> for Twhere
D: ResourceDialect,
Source§impl<T, D> Encode<Ambiguous2, D> for Twhere
D: ResourceDialect,
impl<T, D> Encode<Ambiguous2, D> for Twhere
D: ResourceDialect,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more