public string GenerateUrlParameterDefinition(ApiUrlParameter apiUrlParameter) { var indent = new Indent(); var builder = new StringBuilder(); var typeNameForUrlParameter = apiUrlParameter.ToCSharpClassName(); if (apiUrlParameter.Deprecation != null) { builder.AppendLine(apiUrlParameter.Deprecation.ToCSharpDeprecation()); } // Parameter type builder.AppendLine($"{indent}[JsonConverter(typeof(UrlParameterConverter))]"); builder.AppendLine($"{indent}public abstract class {typeNameForUrlParameter} : IUrlParameter"); builder.AppendLine($"{indent}{{"); indent.Increment(); foreach (var apiUrlParameterOption in apiUrlParameter.Options) { builder.Append( indent.Wrap( GenerateUrlParameterOptionFactoryMethod(apiUrlParameterOption, typeNameForUrlParameter))); } foreach (var apiUrlParameterOption in apiUrlParameter.Options) { builder.Append( indent.Wrap( GenerateUrlParameterOptionClass(apiUrlParameterOption, typeNameForUrlParameter))); } indent.Decrement(); builder.AppendLine($"{indent}}}"); return(builder.ToString()); }
public static string ToCSharpClassName(this ApiUrlParameter subject) => CSharpIdentifier.ForClassOrNamespace(subject.Name);