using System; using System.Text; namespace Utf8Json.Internal { internal static class StringMutator { /// /// MyProperty -> MyProperty /// public static string Original(string s) { return s; } /// /// MyProperty -> myProperty /// public static string ToCamelCase(string s) { if (string.IsNullOrEmpty(s) || char.IsLower(s, 0)) { return s; } var array = s.ToCharArray(); array[0] = char.ToLowerInvariant(array[0]); return new string(array); } /// /// MyProperty -> my_property /// public static string ToSnakeCase(string s) { if (string.IsNullOrEmpty(s)) return s; var sb = new StringBuilder(); for (int i = 0; i < s.Length; i++) { var c = s[i]; if (Char.IsUpper(c)) { // first if (i == 0) { sb.Append(char.ToLowerInvariant(c)); } else if (char.IsUpper(s[i - 1])) // WriteIO => write_io { sb.Append(char.ToLowerInvariant(c)); } else { sb.Append("_"); sb.Append(char.ToLowerInvariant(c)); } } else { sb.Append(c); } } return sb.ToString(); } } }