File: module_tmpl.hpp

package info (click to toggle)
dnf5 5.4.0.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 17,960 kB
  • sloc: cpp: 94,312; python: 3,370; xml: 1,073; ruby: 600; sql: 250; ansic: 232; sh: 104; perl: 62; makefile: 30
file content (124 lines) | stat: -rw-r--r-- 4,292 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
// Copyright Contributors to the DNF5 project.
// Copyright Contributors to the libdnf project.
// SPDX-License-Identifier: LGPL-2.1-or-later
//
// 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_CLI_OUTPUT_ADAPTERS_MODULE_TMPL_HPP
#define LIBDNF5_CLI_OUTPUT_ADAPTERS_MODULE_TMPL_HPP

#include "../interfaces/module.hpp"

namespace libdnf5::cli::output {

template <class T>
class ModuleDependencyAdapter : public IModuleDependency {
public:
    ModuleDependencyAdapter(const T & dep) : dep{dep} {}

    ModuleDependencyAdapter(T && dep) : dep{std::move(dep)} {}

    std::string to_string() { return dep.to_string(); }

private:
    T dep;
};


template <class T>
class ModuleProfileAdapter : public IModuleProfile {
public:
    ModuleProfileAdapter(const T & module_profile) : module_profile{module_profile} {}

    ModuleProfileAdapter(T && module_profile) : module_profile{std::move(module_profile)} {}

    std::string get_name() const override { return module_profile.get_name(); }

    std::string get_description() const override { return module_profile.get_description(); }

    std::vector<std::string> get_rpms() const override { return module_profile.get_rpms(); }

    bool is_default() const override { return module_profile.is_default(); }

private:
    T module_profile;
};


template <class T>
class ModuleItemAdapter : public IModuleItem {
public:
    ModuleItemAdapter(const T & pkg) : pkg{pkg} {}

    ModuleItemAdapter(T && pkg) : pkg{std::move(pkg)} {}

    std::string get_name() const override { return pkg.get_name(); }

    std::string get_stream() const override { return pkg.get_stream(); }

    long long get_version() const override { return pkg.get_version(); }

    std::string get_version_str() const override { return pkg.get_version_str(); }

    std::string get_context() const override { return pkg.get_context(); }

    std::string get_arch() const override { return pkg.get_arch(); }

    std::string get_full_identifier() const override { return pkg.get_full_identifier(); }

    std::string get_summary() const override { return pkg.get_summary(); }
    std::string get_description() const override { return pkg.get_description(); }

    std::vector<std::string> get_artifacts() const override { return pkg.get_artifacts(); }

    std::vector<std::unique_ptr<IModuleProfile>> get_profiles() const override {
        std::vector<std::unique_ptr<IModuleProfile>> ret;
        const auto & profiles = pkg.get_profiles();
        ret.reserve(profiles.size());
        for (const auto & profile : profiles) {
            ret.emplace_back(new ModuleProfileAdapter(profile));
        }
        return ret;
    }

    std::vector<std::string> get_default_profiles() const override { return pkg.get_default_profiles(); }

    std::vector<std::unique_ptr<IModuleDependency>> get_module_dependencies(bool remove_platform) const override {
        std::vector<std::unique_ptr<IModuleDependency>> ret;
        const auto & deps = pkg.get_module_dependencies(remove_platform);
        ret.reserve(deps.size());
        for (const auto & dep : deps) {
            ret.emplace_back(new ModuleDependencyAdapter(dep));
        }
        return ret;
    }

    std::string get_repo_id() const override { return pkg.get_repo_id(); }

    bool is_active() const override { return pkg.is_active(); }

    module::ModuleStatus get_status() const override { return pkg.get_status(); }

    bool is_default() const override { return pkg.is_default(); }

private:
    T pkg;
};

}  // namespace libdnf5::cli::output

#endif  // LIBDNF5_CLI_OUTPUT_ADAPTERS_MODULE_TMPL_HPP