forked from loafle/openapi-generator-original
[nancyfx/csharp] Customize interface prefix (#4557)
Per #4486, this allows user to specify the use of a standard or custom prefix for interfaces. For C# based languages, this follows Microsoft's Framework Design Guidelines and uses an I- prefix. However, to avoid breaking changes with existing nancyfx generated code, the default is unset. The option supports true, false, or a custom prefix.
This commit is contained in:
@@ -86,6 +86,9 @@ public class CodegenConstants {
|
||||
public static final String USE_COLLECTION = "useCollection";
|
||||
public static final String USE_COLLECTION_DESC = "Deserialize array types to Collection<T> instead of List<T>.";
|
||||
|
||||
public static final String INTERFACE_PREFIX = "interfacePrefix";
|
||||
public static final String INTERFACE_PREFIX_DESC = "Prefix interfaces with a community standard or widely accepted prefix.";
|
||||
|
||||
public static final String RETURN_ICOLLECTION = "returnICollection";
|
||||
public static final String RETURN_ICOLLECTION_DESC = "Return ICollection<T> instead of the concrete type.";
|
||||
|
||||
|
||||
@@ -27,6 +27,8 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co
|
||||
protected String packageCompany = "Swagger";
|
||||
protected String packageCopyright = "No Copyright";
|
||||
|
||||
protected String interfacePrefix = "I";
|
||||
|
||||
protected String sourceFolder = "src";
|
||||
|
||||
// TODO: Add option for test folder output location. Nice to allow e.g. ./test instead of ./src.
|
||||
@@ -254,6 +256,18 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co
|
||||
if (additionalProperties.containsKey(CodegenConstants.OPTIONAL_EMIT_DEFAULT_VALUES)) {
|
||||
setOptionalEmitDefaultValue(Boolean.valueOf(additionalProperties.get(CodegenConstants.OPTIONAL_EMIT_DEFAULT_VALUES).toString()));
|
||||
}
|
||||
|
||||
if (additionalProperties.containsKey(CodegenConstants.INTERFACE_PREFIX)) {
|
||||
String useInterfacePrefix = additionalProperties.get(CodegenConstants.INTERFACE_PREFIX).toString();
|
||||
if("false".equals(useInterfacePrefix)) {
|
||||
setInterfacePrefix("");
|
||||
} else if(!"true".equals(useInterfacePrefix)) {
|
||||
// NOTE: if user passes "true" explicitly, we use the default I- prefix. The other supported case here is a custom prefix.
|
||||
setInterfacePrefix(sanitizeName(useInterfacePrefix));
|
||||
}
|
||||
|
||||
additionalProperties.put(CodegenConstants.INTERFACE_PREFIX, interfacePrefix);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -616,6 +630,14 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co
|
||||
this.sourceFolder = sourceFolder;
|
||||
}
|
||||
|
||||
public String getInterfacePrefix() {
|
||||
return interfacePrefix;
|
||||
}
|
||||
|
||||
public void setInterfacePrefix(final String interfacePrefix) {
|
||||
this.interfacePrefix = interfacePrefix;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toEnumVarName(String name, String datatype) {
|
||||
if (name.length() == 0) {
|
||||
|
||||
@@ -72,6 +72,10 @@ public class CSharpClientCodegen extends AbstractCSharpCodegen {
|
||||
CodegenConstants.OPTIONAL_PROJECT_GUID_DESC,
|
||||
null);
|
||||
|
||||
addOption(CodegenConstants.INTERFACE_PREFIX,
|
||||
CodegenConstants.INTERFACE_PREFIX_DESC,
|
||||
interfacePrefix);
|
||||
|
||||
CliOption framework = new CliOption(
|
||||
CodegenConstants.DOTNET_FRAMEWORK,
|
||||
CodegenConstants.DOTNET_FRAMEWORK_DESC
|
||||
|
||||
@@ -1,20 +1,7 @@
|
||||
package io.swagger.codegen.languages;
|
||||
|
||||
import static com.google.common.base.Strings.isNullOrEmpty;
|
||||
import static io.swagger.codegen.CodegenConstants.OPTIONAL_PROJECT_FILE;
|
||||
import static io.swagger.codegen.CodegenConstants.OPTIONAL_PROJECT_FILE_DESC;
|
||||
import static io.swagger.codegen.CodegenConstants.PACKAGE_NAME;
|
||||
import static io.swagger.codegen.CodegenConstants.PACKAGE_VERSION;
|
||||
import static io.swagger.codegen.CodegenConstants.RETURN_ICOLLECTION;
|
||||
import static io.swagger.codegen.CodegenConstants.RETURN_ICOLLECTION_DESC;
|
||||
import static io.swagger.codegen.CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG;
|
||||
import static io.swagger.codegen.CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG_DESC;
|
||||
import static io.swagger.codegen.CodegenConstants.SOURCE_FOLDER;
|
||||
import static io.swagger.codegen.CodegenConstants.SOURCE_FOLDER_DESC;
|
||||
import static io.swagger.codegen.CodegenConstants.USE_COLLECTION;
|
||||
import static io.swagger.codegen.CodegenConstants.USE_COLLECTION_DESC;
|
||||
import static io.swagger.codegen.CodegenConstants.USE_DATETIME_OFFSET;
|
||||
import static io.swagger.codegen.CodegenConstants.USE_DATETIME_OFFSET_DESC;
|
||||
import static io.swagger.codegen.CodegenConstants.*;
|
||||
import static io.swagger.codegen.CodegenType.SERVER;
|
||||
import static java.util.Arrays.asList;
|
||||
import static java.util.UUID.randomUUID;
|
||||
@@ -71,6 +58,9 @@ public class NancyFXServerCodegen extends AbstractCSharpCodegen {
|
||||
outputFolder = "generated-code" + File.separator + getName();
|
||||
apiTemplateFiles.put("api.mustache", ".cs");
|
||||
|
||||
// Early versions use no prefix for interfaces. Defaulting to I- common practice would break existing users.
|
||||
setInterfacePrefix("");
|
||||
|
||||
// contextually reserved words
|
||||
setReservedWordsLowerCase(
|
||||
asList("var", "async", "await", "dynamic", "yield")
|
||||
@@ -82,6 +72,7 @@ public class NancyFXServerCodegen extends AbstractCSharpCodegen {
|
||||
addOption(PACKAGE_NAME, "C# package name (convention: Title.Case).", packageName);
|
||||
addOption(PACKAGE_VERSION, "C# package version.", packageVersion);
|
||||
addOption(SOURCE_FOLDER, SOURCE_FOLDER_DESC, sourceFolder);
|
||||
addOption(INTERFACE_PREFIX, INTERFACE_PREFIX_DESC, interfacePrefix);
|
||||
|
||||
// CLI Switches
|
||||
addSwitch(SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_BY_REQUIRED_FLAG_DESC, sortParamsByRequiredFlag);
|
||||
|
||||
Reference in New Issue
Block a user