fs

Форк
0
/
Fs.php 
102 строки · 2.1 Кб
1
<?php
2

3
declare(strict_types=1);
4

5
namespace Upside\Std\Fs;
6

7
use Upside\Std\Option;
8
use function Upside\Std\None;
9
use function Upside\Std\Some;
10

11
final class Fs
12
{
13
    private Dir|File $file;
14

15
    public function __construct(Dir|File $file)
16
    {
17
        $this->file = $file;
18
    }
19

20
    public static function from(string $path): self
21
    {
22
        return \is_dir($path) ? new self(Dir::from($path)) : new self(File::from($path));
23
    }
24

25
    public static function from_dir(string $path): Dir
26
    {
27
        return Dir::from($path);
28
    }
29

30
    public static function from_file(string $path): File
31
    {
32
        return File::from($path);
33
    }
34

35
    // TODO: Проверить как работает с директориями
36
    public function touch(): self
37
    {
38
        return $this;
39
    }
40

41
    // TODO: Проверить как работает с директориями
42
    public function chown(): self
43
    {
44
        return $this;
45
    }
46

47
    // TODO: Проверить как работает с директориями
48
    public function chgrp(): self
49
    {
50
        return $this;
51
    }
52

53
    // TODO: Проверить как работает с директориями
54
    public function chmod(): self
55
    {
56
        return $this;
57
    }
58

59
    public function remove(): self
60
    {
61
        $this->file->remove();
62

63
        return $this;
64
    }
65

66
    public function rename(string $new_name): self
67
    {
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)
71
            );
72
        }
73

74
        return self::from($new_name);
75
    }
76

77
    /**
78
     * @return Option<File>
79
     */
80
    public function file(): Option
81
    {
82
        return $this->is_file() ? Some($this->file) : None();
83
    }
84

85
    /**
86
     * @return Option<Dir>
87
     */
88
    public function dir(): Option
89
    {
90
        return $this->is_dir() ? Some($this->file) : None();
91
    }
92

93
    public function is_dir(): bool
94
    {
95
        return $this->file instanceof Dir;
96
    }
97

98
    public function is_file(): bool
99
    {
100
        return !$this->is_dir();
101
    }
102
}

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.