Skip to content

Commit 7c7fa68

Browse files
authored
[F#] minor improvements to the generators (#3968)
* add license, minor code format * mark fsharp generator as beta * update doc
1 parent 5c24a54 commit 7c7fa68

5 files changed

Lines changed: 99 additions & 70 deletions

File tree

bin/fsharp-functions-server-petstore.sh

100644100755
File mode changed.

docs/generators.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,8 @@ The following generators are available:
7575
* [cpp-restbed-server](generators/cpp-restbed-server)
7676
* [csharp-nancyfx](generators/csharp-nancyfx)
7777
* [erlang-server](generators/erlang-server)
78-
* [fsharp-functions](generators/fsharp-functions)
79-
* [fsharp-giraffe-server](generators/fsharp-giraffe-server)
78+
* [fsharp-functions (beta)](generators/fsharp-functions)
79+
* [fsharp-giraffe-server (beta)](generators/fsharp-giraffe-server)
8080
* [go-gin-server](generators/go-gin-server)
8181
* [go-server](generators/go-server)
8282
* [graphql-nodejs-express-server](generators/graphql-nodejs-express-server)

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractFSharpCodegen.java

Lines changed: 58 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.openapitools.codegen.utils.ModelUtils;
3030
import org.slf4j.Logger;
3131
import org.slf4j.LoggerFactory;
32+
3233
import java.lang.Exception;
3334

3435
import java.io.File;
@@ -298,7 +299,7 @@ public void processOpts() {
298299
}
299300

300301
if (additionalProperties.containsKey(CodegenConstants.MODEL_PROPERTY_NAMING)) {
301-
setModelPropertyNaming((String) additionalProperties.get(CodegenConstants.MODEL_PROPERTY_NAMING));
302+
setModelPropertyNaming((String) additionalProperties.get(CodegenConstants.MODEL_PROPERTY_NAMING));
302303
}
303304

304305
// This either updates additionalProperties with the above fixes, or sets the default if the option was not specified.
@@ -345,49 +346,49 @@ public Map<String, Object> postProcessAllModels(Map<String, Object> objs) {
345346
}
346347

347348
/*
348-
* F# does not allow forward declarations, so files must be imported in the correct order.
349-
* Output of CodeGen models must therefore bein dependency order (rather than alphabetical order, which seems to be the default).
350-
* This could probably be made more efficient if absolutely needed.
351-
*/
349+
* F# does not allow forward declarations, so files must be imported in the correct order.
350+
* Output of CodeGen models must therefore bein dependency order (rather than alphabetical order, which seems to be the default).
351+
* This could probably be made more efficient if absolutely needed.
352+
*/
352353
@SuppressWarnings({"unchecked"})
353-
public Map<String,Object> postProcessDependencyOrders(final Map<String, Object> objs) {
354-
355-
Map<String,Set<String>> dependencies = new HashMap<String,Set<String>>();
356-
357-
List<String> classNames = new ArrayList<String>();
358-
359-
for(String k : objs.keySet()) {
360-
CodegenModel model = ModelUtils.getModelByName(k, objs);
361-
if(model == null || model.classname == null) {
362-
throw new RuntimeException("Null model encountered");
354+
public Map<String, Object> postProcessDependencyOrders(final Map<String, Object> objs) {
355+
356+
Map<String, Set<String>> dependencies = new HashMap<String, Set<String>>();
357+
358+
List<String> classNames = new ArrayList<String>();
359+
360+
for (String k : objs.keySet()) {
361+
CodegenModel model = ModelUtils.getModelByName(k, objs);
362+
if (model == null || model.classname == null) {
363+
throw new RuntimeException("Null model encountered");
364+
}
365+
dependencies.put(model.classname, model.imports);
366+
367+
classNames.add(model.classname);
368+
}
369+
370+
Object[] sortedKeys = classNames.toArray();
371+
372+
for (int i1 = 0; i1 < sortedKeys.length; i1++) {
373+
String k1 = sortedKeys[i1].toString();
374+
for (int i2 = i1 + 1; i2 < sortedKeys.length; i2++) {
375+
String k2 = sortedKeys[i2].toString();
376+
if (dependencies.get(k2).contains(k1)) {
377+
sortedKeys[i2] = k1;
378+
sortedKeys[i1] = k2;
379+
i1 = -1;
380+
break;
381+
}
382+
}
363383
}
364-
dependencies.put(model.classname, model.imports);
365-
366-
classNames.add(model.classname);
367-
}
368-
369-
Object[] sortedKeys = classNames.toArray();
370-
371-
for(int i1 = 0 ; i1 < sortedKeys.length; i1++) {
372-
String k1 = sortedKeys[i1].toString();
373-
for(int i2 = i1 + 1; i2 < sortedKeys.length; i2++) {
374-
String k2 = sortedKeys[i2].toString();
375-
if(dependencies.get(k2).contains(k1)) {
376-
sortedKeys[i2] = k1;
377-
sortedKeys[i1] = k2;
378-
i1 = -1;
379-
break;
380-
}
384+
385+
Map<String, Object> sorted = new LinkedHashMap<String, Object>();
386+
for (int i = sortedKeys.length - 1; i >= 0; i--) {
387+
Object k = sortedKeys[i];
388+
sorted.put(k.toString(), objs.get(k));
381389
}
382-
}
383-
384-
Map<String,Object> sorted = new LinkedHashMap<String,Object>();
385-
for(int i = sortedKeys.length - 1; i >= 0; i--) {
386-
Object k = sortedKeys[i];
387-
sorted.put(k.toString(), objs.get(k));
388-
}
389-
390-
return sorted;
390+
391+
return sorted;
391392
}
392393

393394
/**
@@ -656,23 +657,23 @@ public void setModelPropertyNaming(String naming) {
656657
}
657658
}
658659

659-
660+
660661
public String getNameUsingModelPropertyNaming(String name) {
661-
switch (CodegenConstants.MODEL_PROPERTY_NAMING_TYPE.valueOf(getModelPropertyNaming())) {
662-
case original:
663-
return name;
664-
case camelCase:
665-
return camelize(name, true);
666-
case PascalCase:
667-
return camelize(name);
668-
case snake_case:
669-
return underscore(name);
670-
default:
671-
throw new IllegalArgumentException("Invalid model property naming '" +
672-
name + "'. Must be 'original', 'camelCase', " +
673-
"'PascalCase' or 'snake_case'");
674-
}
675-
}
662+
switch (CodegenConstants.MODEL_PROPERTY_NAMING_TYPE.valueOf(getModelPropertyNaming())) {
663+
case original:
664+
return name;
665+
case camelCase:
666+
return camelize(name, true);
667+
case PascalCase:
668+
return camelize(name);
669+
case snake_case:
670+
return underscore(name);
671+
default:
672+
throw new IllegalArgumentException("Invalid model property naming '" +
673+
name + "'. Must be 'original', 'camelCase', " +
674+
"'PascalCase' or 'snake_case'");
675+
}
676+
}
676677

677678
@Override
678679
public String toVarName(String name) {

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/FsharpFunctionsServerCodegen.java

Lines changed: 33 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,24 @@
1+
/*
2+
* Copyright 2018 OpenAPI-Generator Contributors (https://openapi-generator.tech)
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License. x
15+
*/
16+
117
package org.openapitools.codegen.languages;
218

319
import org.openapitools.codegen.*;
20+
import org.openapitools.codegen.meta.GeneratorMetadata;
21+
import org.openapitools.codegen.meta.Stability;
422
import io.swagger.models.properties.ArrayProperty;
523
import io.swagger.models.properties.MapProperty;
624
import io.swagger.models.properties.Property;
@@ -28,12 +46,16 @@ public String getName() {
2846
}
2947

3048
public String getHelp() {
31-
return "Generates a fsharp-functions server.";
49+
return "Generates a fsharp-functions server (beta).";
3250
}
3351

3452
public FsharpFunctionsServerCodegen() {
3553
super();
3654

55+
generatorMetadata = GeneratorMetadata.newBuilder(generatorMetadata)
56+
.stability(Stability.BETA)
57+
.build();
58+
3759
// CLI options
3860
addOption(CodegenConstants.LICENSE_URL,
3961
CodegenConstants.LICENSE_URL_DESC,
@@ -68,21 +90,21 @@ public FsharpFunctionsServerCodegen() {
6890
null);
6991

7092
addOption(CodegenConstants.SOURCE_FOLDER,
71-
CodegenConstants.SOURCE_FOLDER_DESC,
72-
sourceFolder);
93+
CodegenConstants.SOURCE_FOLDER_DESC,
94+
sourceFolder);
7395
}
74-
96+
7597
@Override
7698
public void processOpts() {
7799
super.processOpts();
78100

79101
modelPackage = "Model";
80102
embeddedTemplateDir = templateDir = "fsharp-functions-server";
81103

82-
apiTemplateFiles.put("Handler.mustache", "Handler.fs");
83-
apiTemplateFiles.put("HandlerParams.mustache", "HandlerParams.fs");
84-
apiTemplateFiles.put("ServiceInterface.mustache", "ServiceInterface.fs");
85-
apiTemplateFiles.put("ServiceImpl.mustache", "Service.fs");
104+
apiTemplateFiles.put("Handler.mustache", "Handler.fs");
105+
apiTemplateFiles.put("HandlerParams.mustache", "HandlerParams.fs");
106+
apiTemplateFiles.put("ServiceInterface.mustache", "ServiceInterface.fs");
107+
apiTemplateFiles.put("ServiceImpl.mustache", "Service.fs");
86108
modelTemplateFiles.put("Model.mustache", ".fs");
87109

88110
String implFolder = sourceFolder + File.separator + "impl";
@@ -99,9 +121,9 @@ public void processOpts() {
99121

100122
@Override
101123
public String modelFileFolder() {
102-
return super.modelFileFolder().replace("Model","model");
124+
return super.modelFileFolder().replace("Model", "model");
103125
}
104-
126+
105127
@Override
106128
public String apiFileFolder() {
107129
return super.apiFileFolder() + File.separator + "api";
@@ -113,7 +135,7 @@ private String implFileFolder() {
113135

114136
@Override()
115137
public String toModelImport(String name) {
116-
return packageName + "." + modelPackage() + "." + name;
138+
return packageName + "." + modelPackage() + "." + name;
117139
}
118140

119141
@Override

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/FsharpGiraffeServerCodegen.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
import org.openapitools.codegen.CodegenConstants;
2323
import org.openapitools.codegen.CodegenOperation;
2424
import org.openapitools.codegen.CodegenType;
25+
import org.openapitools.codegen.meta.GeneratorMetadata;
26+
import org.openapitools.codegen.meta.Stability;
2527
import org.openapitools.codegen.SupportingFile;
2628
import org.openapitools.codegen.utils.URLPathUtils;
2729
import org.slf4j.Logger;
@@ -59,6 +61,10 @@ public class FsharpGiraffeServerCodegen extends AbstractFSharpCodegen {
5961
public FsharpGiraffeServerCodegen() {
6062
super();
6163

64+
generatorMetadata = GeneratorMetadata.newBuilder(generatorMetadata)
65+
.stability(Stability.BETA)
66+
.build();
67+
6268
modelPackage = "Model";
6369

6470
apiTemplateFiles.put("Handler.mustache", "Handler.fs");

0 commit comments

Comments
 (0)