finnow/finnow-api/source/util/data.d

44 lines
1.1 KiB
D

module util.data;
import handy_http_primitives;
import std.typecons;
Optional!T toOptional(T)(Nullable!T value) {
if (value.isNull) {
return Optional!T.empty;
} else {
return Optional!T.of(value.get);
}
}
Nullable!T toNullable(T)(Optional!T value) {
if (value.isNull) {
return Nullable!(T)();
} else {
return Nullable!T(value.value);
}
}
auto serializeOptional(T)(Optional!T value) {
if (value.isNull) {
return Nullable!T();
}
return Nullable!T(value.value);
}
ulong getPathParamOrThrow(T = ulong)(in ServerHttpRequest req, string name) {
import handy_http_handlers.path_handler;
import std.conv;
foreach (param; getPathParams(req)) {
if (param.name == name) {
try {
return param.value.to!T;
} catch (ConvException e) {
// Skip and throw if no params match.
}
}
}
// No params matched, so throw a NOT FOUND error.
throw new HttpStatusException(HttpStatus.NOT_FOUND, "Missing required path parameter \"" ~ name ~ "\".");
}