pds 2.1.0-alpha
Loading...
Searching...
No Matches
mtsPayload.hpp
Go to the documentation of this file.
1
2#pragma once
3
4#include <string>
5#include <string_view>
6#include <nlohmann/json.hpp>
7
8#include <optional>
9#include <stdexcept>
10#include <regex>
11
12
13namespace pds::aqgc::devices {
14 using nlohmann::json;
15
16
17inline json get_untyped(const json& j, const char* property)
18{
19 auto it = j.find(property);
20 if (it != j.end()) return *it;
21 return json{};
22}
23
24inline json get_untyped(const json& j, const std::string& property)
25{
26 return get_untyped(j, property.c_str()); // C++17-safe
27}
28
29// Parse parameters that might be:
30inline json parse_maybe_double_encoded(std::string_view s)
31{
32 json j = json::parse(s);
33
34 if (j.is_string()) {
35 const auto& inner = j.get_ref<const std::string&>();
36 return json::parse(inner);
37 }
38 return j;
39}
40
42{
43public:
44 MtsPayload() = default;
45 virtual ~MtsPayload() = default;
46
47private:
48 std::string action;
49 std::string name;
50 std::optional<double> pos = std::nullopt;
51
52
53public:
54 const std::string& GetAction() const { return action; }
55 std::string& GetMutableAction() { return action; }
56 void SetAction(const std::string& value) { action = value; }
57
58 const std::string& GetName() const { return name; }
59 std::string& GetMutableName() { return name; }
60 void SetName(const std::string& value) { name = value; }
61
62 const double & GetPos() const { return pos.value(); }
63 bool HasPos() const {return pos.has_value(); }
64 double & GetMutablePos() { return pos.value(); }
65 void SetPos(const double & value) { this->pos = value; }
66
67};
68
69inline void from_json(const json& j, MtsPayload& x)
70{
71 // Use value() for robustness; replace with at().get<>() if you want strict-throw.
72 x.SetAction(j.value("action", ""));
73 x.SetName (j.value("name", ""));
74 if (j.count("pos") != 0)
75 {
76 x.SetPos(j.value("pos", 0));
77 }
78
79}
80
81inline void to_json(json& j, const MtsPayload& x)
82{
83 j = json{
84 {"action", x.GetAction()},
85 {"name", x.GetName()}
86 };
87
88 if (x.HasPos())
89 {
90 j["pos"] = x.GetPos();
91 }
92}
93
94// Convenience: build payload directly from a "parameters" string
95inline MtsPayload payload_from_parameters(std::string_view parameters)
96{
97 const json j = parse_maybe_double_encoded(parameters);
98 return j.get<MtsPayload>();
99}
100
101}
102
103/*
104namespace pds::aqgc::devices {
105 using nlohmann::json;
106
107 inline json get_untyped(const json & j, const char * property) {
108 if (j.find(property) != j.end()) {
109 return j.at(property).get<json>();
110 }
111 return json();
112 }
113
114 inline json get_untyped(const json & j, std::string property) {
115 return get_untyped(j, property.data());
116 }
117
118 class MtsPayload {
119 public:
120 MtsPayload() = default;
121 virtual ~MtsPayload() = default;
122
123 private:
124 std::string action;
125 std::string name;
126
127
128 public:
129 const std::string & get_action() const { return action; }
130 std::string & get_mutable_action() { return action; }
131 void set_action(const std::string & value) { this->action = value; }
132 const std::string & get_name() const { return name; }
133 std::string & get_mutable_name() { return name; }
134 void set_name(const std::string & value) { this->name = value; }
135
136 };
137}
138
139namespace nlohmann {
140 void from_json(const json & j, pds::aqgc::devices::MtsPayload & x);
141 void to_json(json & j, const pds::aqgc::devices::MtsPayload & x);
142
143 inline void from_json(const json & j, pds::aqgc::devices::MtsPayload& x) {
144 x.set_action(j.at("action").get<std::string>());
145 x.set_name(j.at("name").get<std::string>());
146
147
148 }
149
150 inline void to_json(json & j, const pds::aqgc::devices::MtsPayload & x) {
151 j = json::object();
152 j["action"] = x.get_action();
153 j["name"] = x.get_name();
154
155 }
156}
157*/
Definition mtsPayload.hpp:42
std::string & GetMutableName()
Definition mtsPayload.hpp:59
void SetAction(const std::string &value)
Definition mtsPayload.hpp:56
const double & GetPos() const
Definition mtsPayload.hpp:62
const std::string & GetAction() const
Definition mtsPayload.hpp:54
void SetName(const std::string &value)
Definition mtsPayload.hpp:60
bool HasPos() const
Definition mtsPayload.hpp:63
void SetPos(const double &value)
Definition mtsPayload.hpp:65
virtual ~MtsPayload()=default
std::string & GetMutableAction()
Definition mtsPayload.hpp:55
double & GetMutablePos()
Definition mtsPayload.hpp:64
const std::string & GetName() const
Definition mtsPayload.hpp:58
Definition mts.hpp:17
json get_untyped(const json &j, const char *property)
Definition mtsPayload.hpp:17
json parse_maybe_double_encoded(std::string_view s)
Definition mtsPayload.hpp:30
MtsPayload payload_from_parameters(std::string_view parameters)
Definition mtsPayload.hpp:95
void from_json(const json &j, MtsPayload &x)
Definition mtsPayload.hpp:69
void to_json(json &j, const MtsPayload &x)
Definition mtsPayload.hpp:81