]>
git.proxmox.com Git - pxar.git/blob - tests/simple/fs.rs
af763391f817119698843bcce3a4816138f98f68
2 use std
::path
::PathBuf
;
4 use anyhow
::{bail, Error}
;
6 use pxar
::decoder
::sync
as decoder
;
7 use pxar
::decoder
::SeqRead
;
8 use pxar
::encoder
::sync
as encoder
;
9 use pxar
::encoder
::{LinkOffset, SeqWrite}
;
10 use pxar
::format
::{self, mode}
;
13 #[derive(Debug, Eq, PartialEq)]
17 Directory(Vec
<Entry
>),
20 Device(format
::Device
),
25 #[derive(Debug, Eq, PartialEq)]
28 pub metadata
: Metadata
,
33 pub fn new(name
: &str) -> Self {
35 name
: name
.to_string(),
36 metadata
: Metadata
::default(),
37 entry
: EntryKind
::Invalid
,
41 pub fn metadata(mut self, metadata
: impl Into
<Metadata
>) -> Self {
42 self.metadata
= metadata
.into();
46 pub fn entry(mut self, entry
: EntryKind
) -> Self {
51 pub fn encode_into
<T
>(&self, encoder
: &mut encoder
::Encoder
<T
>) -> Result
<(), Error
>
56 EntryKind
::Invalid
=> bail
!("invalid entry encountered"),
58 EntryKind
::File(data
) => {
59 let _link
: LinkOffset
= encoder
.add_file(
67 EntryKind
::Directory(entries
) => {
68 let mut dir
= encoder
.create_directory(&self.name
, &self.metadata
)?
;
69 for entry
in entries
{
70 entry
.encode_into(&mut dir
)?
;
75 EntryKind
::Symlink(path
) => {
76 let _
: () = encoder
.add_symlink(&self.metadata
, &self.name
, path
)?
;
79 other
=> bail
!("TODO: encode_entry for {:?}", other
),
84 pub fn decode_from
<T
: SeqRead
>(decoder
: &mut decoder
::Decoder
<T
>) -> Result
<(), Error
> {
90 pub fn test_fs() -> Entry
{
92 .metadata(Metadata
::dir_builder(0o755))
93 .entry(EntryKind
::Directory(vec
![
95 .metadata(Metadata
::dir_builder(0o755))
96 .entry(EntryKind
::Directory(vec
![
98 .metadata(Metadata
::dir_builder(0o700).owner(1000, 1000))
99 .entry(EntryKind
::Directory(vec
![
100 Entry
::new(".profile")
101 .metadata(Metadata
::file_builder(0o644).owner(1000, 1000))
102 .entry(EntryKind
::File(b
"#umask 022".to_vec())),
104 .metadata(Metadata
::file_builder(0o644).owner(1000, 1000))
105 .entry(EntryKind
::File(b
"a file from a user".to_vec())),
109 .metadata(Metadata
::builder(mode
::IFLNK
| 0o777))
110 .entry(EntryKind
::Symlink(PathBuf
::from("usr/bin"))),