On Sunday, 20 September 2020 at 01:51:22 UTC, wjoe wrote:
Would even be more awesome if it provided a function which could be called from a custom main on top of the FancyMain. I find e.g. custom parsing of command line arguments incredibly useful.

Yea, the version 2.0 stuff inside cgi.d does that. You can call `cgiMainImpl` from your own main thing (that's all the mixin does anyway) and disaggregate it as much as you want.

I was improving that this week when the baby decided to come, so the rest will be coming a little later. But on my copy right now you can even break up cgiMainImpl because its implementation is:

---
void requestHandler(Cgi cgi) {
   // if you call cgi.dispatcher in here, it does basically
   // what the old FancyMain would do, going to a class.
}

void main(string[] args) {
alias CustomCgi = Cgi; // just normal class w/o more custom
        if(tryAddonServers(args))
                return;

        if(trySimulatedRequest!(requestHandler, CustomCgi)(args))
                return;

        RequestServer rs;
        rs.listeningPort = 3000; // if you want to change default
        rs.configureFromCommandLineArguments(args);
rs.handleRequests!(requestHandler, CustomCgi)(); // this may never return
}
---


But I haven't pushed this live yet. Probably will write about it in the blog next week or the week after depending on how everything else irl goes. Still not 100% happy with it, but a big goal with my version 2.0 implementation here is to make more pick-and-choose customization possible while still using the automation in the places you want that.

Reply via email to