/// <summary>
 /// Converts or manipulates the <see cref="string" /> value based on the specified <see cref="StringConverterMethod" /> parameter.
 /// </summary>
 /// <param name="value">The <see cref="string" /> value to convert.</param>
 /// <param name="parameter">A parameter <see cref="object" /> that specifies the parameter used in some of the <see cref="StringConverterMethod" /> methods.</param>
 /// <returns>
 /// An <see cref="object" /> with the result of the conversion.
 /// </returns>
 public override object Convert(string value, object parameter)
 {
     return(Method switch
     {
         StringConverterMethod.Concat => value + parameter,
         StringConverterMethod.Trim => value?.Trim(),
         StringConverterMethod.TrimStart => value?.TrimStart(),
         StringConverterMethod.TrimStartString => value?.TrimStartString(parameter?.ToString()),
         StringConverterMethod.TrimStartStringIgnoreCase => value?.TrimStartString(parameter?.ToString(), true),
         StringConverterMethod.TrimEnd => value?.TrimEnd(),
         StringConverterMethod.TrimEndString => value?.TrimEndString(parameter?.ToString()),
         StringConverterMethod.TrimEndStringIgnoreCase => value?.TrimEndString(parameter?.ToString(), true),
         StringConverterMethod.ToLower => value?.ToLower(),
         StringConverterMethod.ToUpper => value?.ToUpper(),
         StringConverterMethod.ToCamelCase => value?.ChangeCasing(StringCasing.CamelCase),
         StringConverterMethod.ToLowerSnakeCase => value?.ChangeCasing(StringCasing.LowerSnakeCase),
         StringConverterMethod.ToUpperSnakeCase => value?.ChangeCasing(StringCasing.UpperSnakeCase),
         StringConverterMethod.ToLowerKebabCase => value?.ChangeCasing(StringCasing.LowerKebabCase),
         StringConverterMethod.ToUpperKebabCase => value?.ChangeCasing(StringCasing.UpperKebabCase),
         StringConverterMethod.Substring => value?.Substring((int)parameter),
         StringConverterMethod.Left => value?.Left((int)parameter),
         StringConverterMethod.Right => value?.Right((int)parameter),
         StringConverterMethod.StartsWith => value?.StartsWith(parameter?.ToString()) == true,
         StringConverterMethod.StartsWithIgnoreCase => value?.StartsWith(parameter?.ToString(), StringComparison.OrdinalIgnoreCase) == true,
         StringConverterMethod.EndsWith => value?.EndsWith(parameter?.ToString()) == true,
         StringConverterMethod.EndsWithIgnoreCase => value?.EndsWith(parameter?.ToString(), StringComparison.OrdinalIgnoreCase) == true,
         StringConverterMethod.Contains => value?.Contains(parameter?.ToString()) == true,
         StringConverterMethod.ContainsIgnoreCase => value?.Contains(parameter?.ToString(), SpecialStringComparisons.IgnoreCase) == true,
         StringConverterMethod.ReplaceLineBreaks => value?.ReplaceLineBreaks(parameter?.ToString()),
         StringConverterMethod.TrimText => value == null ? null : Wording.TrimText(value, (int)parameter),
         StringConverterMethod.StringDistanceLevenshtein => value != null && parameter is string?StringDistance.Levenshtein(value, (string)parameter) : (int?)null,
             StringConverterMethod.StringDistanceDamerauLevenshtein => value != null && parameter is string?StringDistance.DamerauLevenshtein(value, (string)parameter) : (int?)null,
                 _ => throw Throw.InvalidEnumArgument(nameof(Method), Method)
     });