public static function make(string $path, int $ifExists = Directory::MAKE_DIRECTORY_EXISTS_THROW_EXCEPTION) : Directory
    {
        $exists = Directory::exists($path);

        if($exists) {
            if($ifExists === Directory::MAKE_DIRECTORY_EXISTS_OVERWRITE) {
                unlink($path);
            } else if($ifExists === Directory::MAKE_DIRECTORY_EXISTS_OPEN) {
                return new Directory($path);
            } else {
                throw new DirectoryAlreadyExists($path);
            }
        }

        if(!mkdir($path)) {
            throw new CouldntCreateDirectory($path);
        }

        return new Directory($path);
    }