-
Notifications
You must be signed in to change notification settings - Fork 99
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[libdnf5 API] Base::get_plugins_info
Introduces the `Base::get_plugins_info` method, which returns a list of information about plugins found during `Base::setup`. It also introduces the `plugin::PluginInfo` class, which provides information about one libdnf5 plugin.
- Loading branch information
Showing
11 changed files
with
300 additions
and
16 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
/* | ||
Copyright Contributors to the libdnf project. | ||
This file is part of li | ||
bdnf: https://github.com/rpm-software-management/libdnf/ | ||
Libdnf is free software: you can redistribute it and/or modify | ||
it under the terms of the GNU Lesser General Public License as published by | ||
the Free Software Foundation, either version 2.1 of the License, or | ||
(at your option) any later version. | ||
Libdnf is distributed in the hope that it will be useful, | ||
but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
GNU Lesser General Public License for more details. | ||
You should have received a copy of the GNU Lesser General Public License | ||
along with libdnf. If not, see <https://www.gnu.org/licenses/>. | ||
*/ | ||
|
||
#ifndef LIBDNF5_PLUGIN_PLUGIN_INFO_HPP | ||
#define LIBDNF5_PLUGIN_PLUGIN_INFO_HPP | ||
|
||
#include "plugin_version.hpp" | ||
|
||
#include "libdnf5/common/impl_ptr.hpp" | ||
#include "libdnf5/version.hpp" | ||
|
||
namespace libdnf5::plugin { | ||
|
||
class PluginInfo { | ||
public: | ||
~PluginInfo(); | ||
|
||
PluginInfo(const PluginInfo & src); | ||
PluginInfo(PluginInfo && src) noexcept; | ||
PluginInfo & operator=(const PluginInfo & src); | ||
PluginInfo & operator=(PluginInfo && src) noexcept; | ||
|
||
PluginInfo() = delete; | ||
|
||
/// @return the real name of the plugin or derived from the configuration file if the plugin is not loaded | ||
const std::string & get_name() const noexcept; | ||
|
||
/// @return true if the plugin is loaded | ||
bool is_loaded() const noexcept; | ||
|
||
/// @return the version of the API supported by the plugin, or zeros if the plugin is not loaded | ||
PluginAPIVersion get_api_version() const noexcept; | ||
|
||
/// @return the real plugin name (returned from plugin) or nullptr if the plugin is not loaded | ||
const char * get_real_name() const noexcept; | ||
|
||
/// @return the version of the plugin, or zeros if the plugin is not loaded | ||
Version get_version() const noexcept; | ||
|
||
/// @return a nullptr terminated array of attributes supported by the plugin or nullptr if the plugin is not loaded | ||
const char * const * get_attributes() const noexcept; | ||
|
||
/// Gets the value of the attribute from the plugin. | ||
/// Returns nullptr if the attribute does not exist or plugin is not loaded. | ||
/// @return the value of the `name` attribute or nullptr | ||
const char * get_attribute(const char * name) const noexcept; | ||
|
||
class Impl; | ||
|
||
private: | ||
explicit PluginInfo(Impl & p_impl); | ||
|
||
ImplPtr<Impl> p_impl; | ||
}; | ||
|
||
} // namespace libdnf5::plugin | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
/* | ||
Copyright Contributors to the libdnf project. | ||
This file is part of libdnf: https://github.com/rpm-software-management/libdnf/ | ||
Libdnf is free software: you can redistribute it and/or modify | ||
it under the terms of the GNU Lesser General Public License as published by | ||
the Free Software Foundation, either version 2.1 of the License, or | ||
(at your option) any later version. | ||
Libdnf is distributed in the hope that it will be useful, | ||
but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
GNU Lesser General Public License for more details. | ||
You should have received a copy of the GNU Lesser General Public License | ||
along with libdnf. If not, see <https://www.gnu.org/licenses/>. | ||
*/ | ||
|
||
#ifndef LIBDNF5_PLUGIN_PLUGIN_VERSION_HPP | ||
#define LIBDNF5_PLUGIN_PLUGIN_VERSION_HPP | ||
|
||
#include <cstdint> | ||
|
||
namespace libdnf5::plugin { | ||
|
||
/// Plugin version | ||
struct Version { | ||
std::uint16_t major; | ||
std::uint16_t minor; | ||
std::uint16_t micro; | ||
}; | ||
|
||
} // namespace libdnf5::plugin | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
/* | ||
Copyright Contributors to the libdnf project. | ||
This file is part of libdnf: https://github.com/rpm-software-management/libdnf/ | ||
Libdnf is free software: you can redistribute it and/or modify | ||
it under the terms of the GNU Lesser General Public License as published by | ||
the Free Software Foundation, either version 2.1 of the License, or | ||
(at your option) any later version. | ||
Libdnf is distributed in the hope that it will be useful, | ||
but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
GNU Lesser General Public License for more details. | ||
You should have received a copy of the GNU Lesser General Public License | ||
along with libdnf. If not, see <https://www.gnu.org/licenses/>. | ||
*/ | ||
|
||
#include "plugin_info_impl.hpp" | ||
|
||
namespace libdnf5::plugin { | ||
|
||
PluginInfo::PluginInfo(Impl & p_impl) : p_impl{&p_impl} {} | ||
|
||
PluginInfo::~PluginInfo() = default; | ||
|
||
PluginInfo::PluginInfo(const PluginInfo & src) = default; | ||
|
||
PluginInfo::PluginInfo(PluginInfo && src) noexcept = default; | ||
|
||
PluginInfo & PluginInfo::operator=(const PluginInfo & src) = default; | ||
|
||
PluginInfo & PluginInfo::operator=(PluginInfo && src) noexcept = default; | ||
|
||
const std::string & PluginInfo::get_name() const noexcept { | ||
return p_impl->get_name(); | ||
} | ||
|
||
bool PluginInfo::is_loaded() const noexcept { | ||
return p_impl->is_loaded(); | ||
} | ||
|
||
PluginAPIVersion PluginInfo::get_api_version() const noexcept { | ||
return p_impl->get_api_version(); | ||
} | ||
|
||
const char * PluginInfo::get_real_name() const noexcept { | ||
return p_impl->get_real_name(); | ||
} | ||
|
||
Version PluginInfo::get_version() const noexcept { | ||
return p_impl->get_version(); | ||
} | ||
|
||
const char * const * PluginInfo::get_attributes() const noexcept { | ||
return p_impl->get_attributes(); | ||
} | ||
|
||
const char * PluginInfo::get_attribute(const char * name) const noexcept { | ||
return p_impl->get_attribute(name); | ||
} | ||
|
||
} // namespace libdnf5::plugin |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
/* | ||
Copyright Contributors to the libdnf project. | ||
This file is part of libdnf: https://github.com/rpm-software-management/libdnf/ | ||
Libdnf is free software: you can redistribute it and/or modify | ||
it under the terms of the GNU Lesser General Public License as published by | ||
the Free Software Foundation, either version 2.1 of the License, or | ||
(at your option) any later version. | ||
Libdnf is distributed in the hope that it will be useful, | ||
but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
GNU Lesser General Public License for more details. | ||
You should have received a copy of the GNU Lesser General Public License | ||
along with libdnf. If not, see <https://www.gnu.org/licenses/>. | ||
*/ | ||
|
||
#ifndef LIBDNF5_PLUGIN_PLUGIN_INFO_IMPL_HPP | ||
#define LIBDNF5_PLUGIN_PLUGIN_INFO_IMPL_HPP | ||
|
||
#include "libdnf5/plugin/iplugin.hpp" | ||
#include "libdnf5/plugin/plugin_info.hpp" | ||
|
||
namespace libdnf5::plugin { | ||
|
||
class PluginInfo::Impl { | ||
public: | ||
static PluginInfo create_plugin_info(std::string name_from_config, const IPlugin * iplugin) { | ||
return PluginInfo(*new Impl(name_from_config, iplugin)); | ||
} | ||
|
||
Impl() = delete; | ||
Impl(const Impl & src) = default; | ||
Impl(Impl && src) = delete; | ||
|
||
~Impl() = default; | ||
|
||
Impl & operator=(const Impl & src) = default; | ||
Impl & operator=(Impl &&) = delete; | ||
|
||
const std::string & get_name() const noexcept { return name; } | ||
|
||
bool is_loaded() const noexcept { return iplugin; } | ||
|
||
PluginAPIVersion get_api_version() const noexcept { | ||
return iplugin ? iplugin->get_api_version() : PluginAPIVersion{0, 0}; | ||
} | ||
|
||
const char * get_real_name() const noexcept { return iplugin ? iplugin->get_name() : nullptr; } | ||
|
||
Version get_version() const noexcept { return iplugin ? iplugin->get_version() : Version{0, 0, 0}; } | ||
|
||
const char * const * get_attributes() const noexcept { return iplugin ? iplugin->get_attributes() : nullptr; } | ||
|
||
const char * get_attribute(const char * name) const noexcept { | ||
return iplugin ? iplugin->get_attribute(name) : nullptr; | ||
} | ||
|
||
private: | ||
explicit Impl(std::string name, const IPlugin * iplugin) : name{name}, iplugin{iplugin} {} | ||
|
||
std::string name; | ||
const IPlugin * iplugin; | ||
}; | ||
|
||
} // namespace libdnf5::plugin | ||
|
||
#endif |
Oops, something went wrong.