Hi, I wanted to customize the toString implementation for my structs.
So I wrote a mixin for doing that:
import std.traits : FieldNameTuple;
import std.format : FormatSpec;
import std.conv : to;
import std.range : put;
private mixin template StructToString(S)
{
void toString(scope void delegate(const(char)[]) sink,
FormatSpec!char fmt)
{
put(sink, typeid(S).toString);
put(sink, "(\n");
foreach (index, name; FieldNameTuple!S)
{
put(sink, " ");
put(sink, name);
put(sink, ": ");
put(sink, this.tupleof[index].to!string);
put(sink, ",\n");
}
put(sink, ")");
}
}
I would've expected this sort of thing (various ways of implementing toString for structs and classes) to be already provided by some library but I couldn't find any.
Anyway, my questions are:
Is the above a "good" way to do this?
Are there libraries (or even something in Phobos?) that already provide some mixins or equivalent functionality?
For reference, I wanted something like Java Lombok's ToString annotation, also present in Groovy.