44 lines
1.1 KiB
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 ~ "\".");
|
|
}
|