1 module dcord.util..string;
2 
3 import std..string;
4 import std.array;
5 import std.ascii : isLower, isUpper;
6 
7 pure string camelCaseToUnderscores(string input) {
8   auto stringBuilder = appender!string;
9   stringBuilder.reserve(input.length * 2);
10   bool previousWasLower = false;
11 
12   foreach (c; input) {
13     if (previousWasLower && c.isUpper()) {
14       stringBuilder.put('_');
15     }
16 
17     if (c.isLower()) {
18       previousWasLower = true;
19     } else {
20       previousWasLower = false;
21     }
22 
23     stringBuilder.put(c);
24   }
25 
26   return stringBuilder.data.toLower();
27 }