File: raw_list.rs

package info (click to toggle)
rust-async-tar 0.4.2-2
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 440 kB
  • sloc: makefile: 2
file content (53 lines) | stat: -rw-r--r-- 2,028 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
//! An example of listing raw entries in an archive.
//!
//! Takes a tarball on stdin and prints out all of the entries inside.

extern crate async_tar;

use async_std::{io::stdin, prelude::*};

use async_tar::Archive;

fn main() {
    async_std::task::block_on(async {
        let ar = Archive::new(stdin());
        let mut i = 0;
        let mut entries = ar.entries_raw().unwrap();
        while let Some(file) = entries.next().await {
            println!("-------------------------- Entry {}", i);
            let mut f = file.unwrap();
            println!("path: {}", f.path().unwrap().display());
            println!("size: {}", f.header().size().unwrap());
            println!("entry size: {}", f.header().entry_size().unwrap());
            println!("link name: {:?}", f.link_name().unwrap());
            println!("file type: {:#x}", f.header().entry_type().as_byte());
            println!("mode: {:#o}", f.header().mode().unwrap());
            println!("uid: {}", f.header().uid().unwrap());
            println!("gid: {}", f.header().gid().unwrap());
            println!("mtime: {}", f.header().mtime().unwrap());
            println!("username: {:?}", f.header().username().unwrap());
            println!("groupname: {:?}", f.header().groupname().unwrap());

            if f.header().as_ustar().is_some() {
                println!("kind: UStar");
            } else if f.header().as_gnu().is_some() {
                println!("kind: GNU");
            } else {
                println!("kind: normal");
            }

            if let Ok(Some(extensions)) = f.pax_extensions().await {
                println!("pax extensions:");
                for e in extensions {
                    let e = e.unwrap();
                    println!(
                        "\t{:?} = {:?}",
                        String::from_utf8_lossy(e.key_bytes()),
                        String::from_utf8_lossy(e.value_bytes())
                    );
                }
            }
            i += 1;
        }
    });
}