module dscord.util..string; import std..string; import std.array; import std.ascii : isLower, isUpper; pure string camelCaseToUnderscores(string input) { auto stringBuilder = appender!string; stringBuilder.reserve(input.length * 2); bool previousWasLower = false; foreach (c; input) { if (previousWasLower && c.isUpper()) { stringBuilder.put('_'); } if (c.isLower()) { previousWasLower = true; } else { previousWasLower = false; } stringBuilder.put(c); } return stringBuilder.data.toLower(); }