#pragma once #include #include #include #include #include namespace katja { class package { std::string m_name; std::string m_version; std::string m_architecture; std::string m_tag; public: explicit package(const std::string& name, const std::string& version, const std::string& architecture, const std::string& tag); const std::string& name() const noexcept; const std::string& version() const noexcept; const std::string& architecture() const noexcept; const std::string& tag() const noexcept; static std::optional parse(const std::string& full_name) noexcept; }; class repository { public: virtual std::unordered_map list(const std::set& package_names) = 0; virtual void refresh() = 0; virtual std::forward_list check_dependencies(const std::string& package_name) = 0; }; std::unordered_map read_package_database(); class package_exception : public std::exception { std::string m_message; public: explicit package_exception(const std::string& package_name, const std::string& reason) noexcept; const std::string_view package_name() const noexcept; const char *what() const noexcept override; }; }