Skip to content

Commit ec13338

Browse files
committed
Add helper messages for enums to strings and strings to enums
1 parent e107f93 commit ec13338

File tree

2 files changed

+47
-30
lines changed

2 files changed

+47
-30
lines changed

src/AnimationData.hpp

Lines changed: 33 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,35 @@ class AnimationData {
126126
return *this;
127127
}
128128

129+
static std::string continuousToString(enum Continuous c) {
130+
switch (c) {
131+
case CONTINUOUS:
132+
return "true";
133+
case NONCONTINUOUS:
134+
return "false";
135+
case DEFAULT:
136+
return "null";
137+
}
138+
}
139+
140+
static enum Direction directionFromString(const std::string & d) {
141+
if (std::strcmp(d.c_str(), "BACKWARD") == 0) return BACKWARD;
142+
else if (std::strcmp(d.c_str(), "FORWARD") == 0) return FORWARD;
143+
else {
144+
std::cerr << "Bad direction string " << d << std::endl;
145+
return FORWARD;
146+
}
147+
}
148+
149+
static std::string directionToString(enum Direction d) {
150+
switch (d) {
151+
case FORWARD:
152+
return "FORWARD";
153+
case BACKWARD:
154+
return "BACKWARD";
155+
}
156+
}
157+
129158
AnimationData() = default;
130159

131160
explicit AnimationData(nlohmann::json data) {
@@ -168,11 +197,8 @@ class AnimationData {
168197
else if (!data["delayMod"].is_null())
169198
std::cerr << "Bad type for delayMod" << data["delayMod"].type_name() << std::endl;
170199

171-
if (data["direction"].is_string() && std::strcmp(data["direction"].get<std::string>().c_str(), "FORWARD") == 0)
172-
setDirection(FORWARD);
173-
else if (data["direction"].is_string() &&
174-
std::strcmp(data["direction"].get<std::string>().c_str(), "BACKWARD") == 0)
175-
setDirection(BACKWARD);
200+
if (data["direction"].is_string())
201+
setDirection(directionFromString(data["direction"].get<std::string>()));
176202
else if (!data["direction"].is_null())
177203
std::cerr << "Bad type for direction" << data["direction"].type_name() << std::endl;
178204

@@ -220,17 +246,7 @@ class AnimationData {
220246
data.append(std::to_string(center));
221247

222248
data.append(R"(,"continuous":)");
223-
switch (continuous) {
224-
case CONTINUOUS:
225-
data.append("true");
226-
break;
227-
case NONCONTINUOUS:
228-
data.append("false");
229-
break;
230-
case DEFAULT:
231-
data.append("null");
232-
break;
233-
}
249+
data.append(continuousToString(continuous));
234250

235251
data.append(R"(,"delay":)");
236252
data.append(std::to_string(delay));
@@ -239,14 +255,7 @@ class AnimationData {
239255
data.append(std::to_string(delay_mod));
240256

241257
data.append(R"(,"direction":")");
242-
switch (direction) {
243-
case FORWARD:
244-
data.append("FORWARD");
245-
break;
246-
case BACKWARD:
247-
data.append("BACKWARD");
248-
break;
249-
}
258+
data.append(directionToString(direction));
250259

251260
data.append(R"(","distance":)");
252261
data.append(std::to_string(distance));

src/AnimationInfo.hpp

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -150,12 +150,20 @@ class AnimationInfo {
150150
return *this;
151151
}
152152

153-
static ParamUsage paramUsageString(const std::string & p) {
153+
static ParamUsage paramUsageFromString(const std::string & p) {
154154
if (std::strcmp(p.c_str(), "USED") == 0) return USED;
155155
else if (std::strcmp(p.c_str(), "NOTUSED") == 0) return NOTUSED;
156156
else return NOTUSED;
157157
}
158158

159+
static std::string paramUsageToString(ParamUsage p) {
160+
switch (p) {
161+
case USED:
162+
return "USED";
163+
case NOTUSED:
164+
return "NOTUSED";
165+
}
166+
}
159167

160168
AnimationInfo() = default;
161169

@@ -196,27 +204,27 @@ class AnimationInfo {
196204
std::cerr << "Bad type for unlimitedColors" << data["unlimitedColors"].type_name() << std::endl;
197205

198206
if (data["center"].is_string())
199-
setCenter(paramUsageString(data["center"].get<std::string>()));
207+
setCenter(paramUsageFromString(data["center"].get<std::string>()));
200208
else if (!data["center"].is_null())
201209
std::cerr << "Bad type for center" << data["center"].type_name() << std::endl;
202210

203211
if (data["delay"].is_string())
204-
setDelay(paramUsageString(data["delay"].get<std::string>()));
212+
setDelay(paramUsageFromString(data["delay"].get<std::string>()));
205213
else if (!data["delay"].is_null())
206214
std::cerr << "Bad type for delay" << data["delay"].type_name() << std::endl;
207215

208216
if (data["direction"].is_string())
209-
setDirection(paramUsageString(data["direction"].get<std::string>()));
217+
setDirection(paramUsageFromString(data["direction"].get<std::string>()));
210218
else if (!data["direction"].is_null())
211219
std::cerr << "Bad type for direction" << data["direction"].type_name() << std::endl;
212220

213221
if (data["distance"].is_string())
214-
setDistance(paramUsageString(data["distance"].get<std::string>()));
222+
setDistance(paramUsageFromString(data["distance"].get<std::string>()));
215223
else if (!data["distance"].is_null())
216224
std::cerr << "Bad type for distance" << data["distance"].type_name() << std::endl;
217225

218226
if (data["spacing"].is_string())
219-
setSpacing(paramUsageString(data["spacing"].get<std::string>()));
227+
setSpacing(paramUsageFromString(data["spacing"].get<std::string>()));
220228
else if (!data["spacing"].is_null())
221229
std::cerr << "Bad type for spacing" << data["spacing"].type_name() << std::endl;
222230

0 commit comments

Comments
 (0)