https://mooseframework.inl.gov
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 
51 template <class T>
52 char
53 registerType(const std::string type_name,
54  std::function<T(const nlohmann::json &)> && parse_function)
55 {
57  type_name, std::move(parse_function));
58 }
59 
70 template <class T>
71 char
72 registerScalarType(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 
89 template <class T>
90 char
91 registerVectorType(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 }
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 registerVectorType(const std::string &type_name)
Register a vector type to be controlled by the WebServerControl.
char registerScalarType(const std::string &type_name)
Register a scalar type to be controlled by the WebServerControl.
A static registry used to register and build values of different types for the WebServerControl.
Defines classes for registering values that can be parsed, communicated, and stored in the WebServerC...
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.