Crate fuchsia_archive

source ·
Expand description

Reading, Writing and Listing Fuchsia Archives (FAR) Data

This crate is a Rust port of the Go Far package.

Example

use anyhow::Error;
use std::collections::BTreeMap;
use std::fs;
use std::io::{Cursor, Read, Write};
use tempfile::TempDir;

fn create_test_files(file_names: &[&str]) -> Result<TempDir, Error> {
    let tmp_dir = TempDir::new()?;
    for file_name in file_names {
        let file_path = tmp_dir.path().join(file_name);
        let parent_dir = file_path.parent().unwrap();
        fs::create_dir_all(&parent_dir)?;
        let file_path = tmp_dir.path().join(file_name);
        let mut tmp_file = fs::File::create(&file_path)?;
        writeln!(tmp_file, "{}", file_name)?;
    }
    Ok(tmp_dir)
}

let file_names = ["b", "a", "dir/c"];
let test_dir = create_test_files(&file_names).unwrap();
let mut path_content_map: BTreeMap<&str, (u64, Box<dyn Read>)> = BTreeMap::new();
for file_name in file_names.iter() {
    let file = fs::File::open(test_dir.path().join(file_name)).unwrap();
    path_content_map.insert(file_name, (file.metadata().unwrap().len(), Box::new(file)));
}
let mut result = Vec::new();
fuchsia_archive::write(&mut result, path_content_map).unwrap();
let result = &result[..];

let reader = fuchsia_archive::Reader::new(Cursor::new(result)).unwrap();
let entries = reader.list().map(|e| e.path()).collect::<Vec<_>>();
assert_eq!(entries, ["a", "b", "dir/c"]);

Structs

A struct to open and read a FAR-formatted archive asynchronously.
A struct to open and read a FAR-formatted archive asynchronously. Requires that all paths are valid UTF-8.
An entry in an archive, returned by Reader::list
A struct to open and read FAR-formatted archive.
An entry in a UTF-8 archive, returned by Reader::list
A struct to open and read FAR-formatted archive. Requires that all paths are valid UTF-8.

Enums

Constants

Functions

Write a FAR-formatted archive to the target.

Type Definitions