mirror of
https://github.com/comit-network/xmr-btc-swap.git
synced 2024-10-01 01:45:40 -04:00
55 lines
2.0 KiB
Rust
55 lines
2.0 KiB
Rust
//! An example of listing raw entries in an archive.
|
|
//!
|
|
//! Takes a tarball on stdin and prints out all of the entries inside.
|
|
|
|
extern crate tokio_tar as async_tar;
|
|
|
|
use tokio::io::stdin;
|
|
use tokio_stream::*;
|
|
|
|
use async_tar::Archive;
|
|
|
|
fn main() {
|
|
tokio::runtime::Runtime::new().unwrap().block_on(async {
|
|
let mut 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;
|
|
}
|
|
});
|
|
}
|