module dcord.util..string; import std.string; import std.array; import std.ascii : isLower, isUpper; /// Convert a camelCase string to a snake_case one. This is a pure function 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(); }