3
declare(strict_types=1);
5
namespace Upside\Std\Fs;
8
use function Upside\Std\None;
9
use function Upside\Std\Some;
13
private Dir|File $file;
15
public function __construct(Dir|File $file)
20
public static function from(string $path): self
22
return \is_dir($path) ? new self(Dir::from($path)) : new self(File::from($path));
25
public static function from_dir(string $path): Dir
27
return Dir::from($path);
30
public static function from_file(string $path): File
32
return File::from($path);
35
// TODO: Проверить как работает с директориями
36
public function touch(): self
41
// TODO: Проверить как работает с директориями
42
public function chown(): self
47
// TODO: Проверить как работает с директориями
48
public function chgrp(): self
53
// TODO: Проверить как работает с директориями
54
public function chmod(): self
59
public function remove(): self
61
$this->file->remove();
66
public function rename(string $new_name): self
68
if (!\rename((string)$this->file, $new_name)) {
69
throw new \RuntimeException(
70
\sprintf('Failed to rename file or directory %s to %s', $this->file, $new_name)
74
return self::from($new_name);
78
* @return Option<File>
80
public function file(): Option
82
return $this->is_file() ? Some($this->file) : None();
88
public function dir(): Option
90
return $this->is_dir() ? Some($this->file) : None();
93
public function is_dir(): bool
95
return $this->file instanceof Dir;
98
public function is_file(): bool
100
return !$this->is_dir();