/* * Copyright (c) 2023, Liav A. * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include constexpr StringView ports_database = "/usr/Ports/installed.db"sv; class InstalledPort { public: enum class Type { Auto, Manual, }; static Optional type_from_string(StringView); static ErrorOr> read_ports_database(); static ErrorOr for_each_by_type(HashMap&, Type type, Function(InstalledPort const&)> callback); InstalledPort(String name, Type type, String version) : m_name(move(name)) , m_type(type) , m_version(move(version)) { } Type type() const { return m_type; } StringView type_as_string_view() const { if (m_type == Type::Auto) return "Automatic"sv; if (m_type == Type::Manual) return "Manual"sv; VERIFY_NOT_REACHED(); } StringView name() const { return m_name.bytes_as_string_view(); } StringView version() const { return m_version.bytes_as_string_view(); } ReadonlySpan dependencies() const { return m_dependencies.span(); } private: String m_name; Type m_type; String m_version; Vector m_dependencies; };