#pragma once #include "util/fs.hpp" #include #include #include #include class IOError : public std::runtime_error { public: IOError() noexcept : std::runtime_error("Unknown IO error") {} explicit IOError(const std::string &error_message) noexcept : std::runtime_error(error_message) { } }; class NoSuchFileOrDirectoryError : public IOError { public: explicit NoSuchFileOrDirectoryError(const std::filesystem::path &path) noexcept : IOError( fmt::format("No file or directory exists with path '{}'", path.string())) { } }; class WrongFileTypeError : public IOError { public: explicit WrongFileTypeError( const std::filesystem::path &path, std::filesystem::file_type expected_file_type, std::filesystem::file_type actual_file_type) noexcept : IOError(fmt::format( "Wrong file type of file with path '{}'. Expected {}, is {}", path.string(), file_type_names.at(expected_file_type), file_type_names.at(actual_file_type))) { } }; class FileNotOpenError : public IOError { public: explicit FileNotOpenError(const std::filesystem::path &path) noexcept : IOError(fmt::format("Failed to open file with path '{}'", path.string())) { } };