module measurement; public import measurement.phobostimer; import sumtype; public alias Measurements = SumType!(PhobosTimer); public alias StateTypes = SumType!(PhobosTimer.StateT); //SumType operations are spelled out explicitly to make it more obvious Measurements toMeasurement(T)(T x) pure { Measurements tmp; tmp = x; return tmp; } @safe StateTypes getState(Measurements fromThis) { return StateTypes(fromThis.match!((ref PhobosTimer f) => f.getState())); } @safe string[][] getHeader(Measurements fromThis) { return (fromThis.match!((ref PhobosTimer f) => f.getHeader())); } @safe auto procMeas(alias func)(ref const Measurements fromThis) { return fromThis.match!((const ref PhobosTimer f) => func(f)); } @safe auto procState(alias func)(ref StateTypes fromThis) { return fromThis.match!((ref PhobosTimer.StateT f) => func(f)); }