1#ifndef LINTEL_FEATURES_H
2#define LINTEL_FEATURES_H
6#include <magic_enum/magic_enum.hpp>
20 class ContainerBuilder;
46 template<
typename T, std::enable_if_t<std::is_enum_v<T>> * =
nullptr>
49 std::string name = std::string(magic_enum::enum_name(
x));
50 m_features.push_back(name);
58 auto names = magic_enum::enum_names<Value>();
59 for (
const auto &
iter : names) { m_features.emplace_back(
iter); }
68 if (
found == m_initializeMap.end()) {
return; }
69 found->second(std::move(container));
78 if (
found == m_registerTypeMap.end()) {
return; }
84 std::vector<std::string>
allOf() {
return m_features; }
96 std::vector<std::string> m_features{};
98 std::map<std::string, RegisterTypeFunc> m_registerTypeMap;
100 std::map<std::string, InitializeFunc> m_initializeMap;
void initializeOf(const std::string &featureName, std::shared_ptr< lintel::di::Container > container)
Definition Features.h:65
std::vector< std::string > allOf()
Definition Features.h:84
Value
Definition Features.h:87
@ Base
Definition Features.h:88
@ Http
Definition Features.h:89
@ Property
Definition Features.h:90
@ Cli
Definition Features.h:91
void registerType(const std::string &featureName, lintel::di::ContainerBuilder &builder)
Definition Features.h:75
Features()
Definition Features.h:56
std::function< void(std::shared_ptr< lintel::di::Container >)> InitializeFunc
Definition Features.h:39
void registerFeature(T x, const RegisterTypeFunc ®isterTypeFunc, const InitializeFunc &initializeFunc)
Definition Features.h:47
std::function< void(lintel::di::ContainerBuilder &)> RegisterTypeFunc
Definition Features.h:37
Definition Container.h:282
Definition BaseFeature.h:6
constexpr std::string_view type_name()
Definition TypeName.h:9