I'm currently trying out vibe.d to implement a certain REST API (BCF, but it's not really important for the question) which specifies that any POST request that successfully creates a new record should return status code 201 ("created") - instead of 200 which vibe.d uses as the default success code.

While it's easy to specify error return codes and/or messages, and even register a custom handler for them through RestInterfaceSettings.errorHandler, I didn't find anything similar for the success case.

I ended up with writing an @after hook, like this:

T setStatusCodeTo201(T)(T result, HTTPServerRequest, HTTPServerResponse response) @safe
    response.statusCode = HTTPStatus.created;
    return result;
Project postProjects(Project project);

First of all, I find it kinda ugly that I need to do it as a template just because the @after hook needs to return the same type as the function, although I don't need to manipulate the value, just the header.

And second... well, the whole approach seems hacky and I was wondering if I was missing some obvious and better way to do it.