https://mooseframework.inl.gov
Loading...
Searching...
No Matches
WebServerControlTypeRegistration.h
Go to the documentation of this file.
1//* This file is part of the MOOSE framework
2//* https://mooseframework.inl.gov
3//*
4//* All rights reserved, see COPYRIGHT for full restrictions
5//* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6//*
7//* Licensed under LGPL 2.1, please see LICENSE for details
8//* https://www.gnu.org/licenses/lgpl-2.1.html
9
10#pragma once
11
12#include <functional>
13#include <vector>
14
15#include "nlohmann/json.h"
16
18#include "WebServerControl.h"
19
20#define registerWebServerControlCombine1(X, Y) X##Y
21#define registerWebServerControlCombine(X, Y) registerWebServerControlCombine1(X, Y)
22// Register a generic type
23#define registerWebServerControlType(T, parse_function) \
24 static char registerWebServerControlCombine(wsc_type, __COUNTER__) = \
25 Moose::WebServerControlTypeRegistration::registerType<T>(#T, parse_function)
26// Register a scalar type
27#define registerWebServerControlScalar(T) \
28 static char registerWebServerControlCombine(wsc_scalar, __COUNTER__) = \
29 Moose::WebServerControlTypeRegistration::registerScalarType<T>(#T)
30// Register a vector type
31#define registerWebServerControlVector(T) \
32 static char registerWebServerControlCombine(wsc_vector, __COUNTER__) = \
33 Moose::WebServerControlTypeRegistration::registerVectorType<T>(#T)
34
40{
41
51template <class T>
52char
53registerType(const std::string type_name,
54 std::function<T(const nlohmann::json &)> && parse_function)
55{
57 type_name, std::move(parse_function));
58}
59
70template <class T>
71char
72registerScalarType(const std::string & type_name)
73{
74 const auto parse_function = [](const nlohmann::json & json_value) -> T
75 { return json_value.get<T>(); };
76 return registerType<T>(type_name, std::move(parse_function));
77}
78
89template <class T>
90char
91registerVectorType(const std::string & type_name)
92{
93 using vector_T = std::vector<T>;
94 const auto parse_function = [](const nlohmann::json & json_value) -> vector_T
95 { return json_value.get<vector_T>(); };
96 return registerType<vector_T>("std::vector<" + type_name + ">", std::move(parse_function));
97}
98
99}
A static registry used to register and build values of different types for the WebServerControl.
static char add(const std::string &type_name, std::function< ValueType(const nlohmann::json &)> &&parse_function)
Register a type in the registry.
Class containing a value to be controlled.
Defines classes for registering values that can be parsed, communicated, and stored in the WebServerC...
char registerVectorType(const std::string &type_name)
Register a vector type to be controlled by the WebServerControl.
char registerType(const std::string type_name, std::function< T(const nlohmann::json &)> &&parse_function)
Register a generic type to be controlled by the WebServerControl.
char registerScalarType(const std::string &type_name)
Register a scalar type to be controlled by the WebServerControl.