Skip to content

Commit

Permalink
Merge pull request #36 from eclipse/feat/create-depenencies
Browse files Browse the repository at this point in the history
feat: create dependencies too
  • Loading branch information
veith authored Nov 13, 2024
2 parents 8607466 + 2b82695 commit 7da1bd1
Show file tree
Hide file tree
Showing 7 changed files with 67 additions and 22 deletions.
5 changes: 5 additions & 0 deletions protoc-gen-open-models/README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# protoc-gen-open-models
This generator will create the models for the @furo/open-models module.


Missing Features:
- OneOf
- fields which starts with _var to Xvar
Expand All @@ -7,6 +11,7 @@ Missing Features:
- ~~Dependency management when needed~~
- Build Parameter **ApiBaseURL** with a default of "/api" ???
- Additional bindings for services (look below)
- version number of protoc-gen-open-models in generates

```
service Messaging {
Expand Down
2 changes: 1 addition & 1 deletion protoc-gen-open-models/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import (
"os/exec"
)

const version = "1.40.0"
const version = "1.41.0"

func main() {
const debugMode = false
Expand Down
8 changes: 8 additions & 0 deletions protoc-gen-open-models/pkg/generator/FieldNames.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package generator

import "github.com/iancoleman/strcase"

func cleanFieldName(body string) string {
// todo: convert _var_name to XvarName
return strcase.ToLowerCamel(body)
}
60 changes: 40 additions & 20 deletions protoc-gen-open-models/pkg/generator/ServiceType.go
Original file line number Diff line number Diff line change
Expand Up @@ -82,33 +82,16 @@ func prepareServiceType(service sourceinfo.ServiceInfo, imports ImportMap) Servi

for _, method := range service.Methods {

requestTypeFQ := fullQualifiedTypeName(method.Method.GetInputType())
responseTypeFQ := fullQualifiedTypeName(method.Method.GetOutputType())
classNameOut := allTypes[method.Method.GetOutputType()].Name
classNameIn := allTypes[method.Method.GetInputType()].Name
fieldPackage := strings.Split("."+service.Package, ".")

relIn, _ := filepath.Rel(strings.Join(fieldPackage, "/"), "/"+typenameToPath(method.Method.GetInputType()))
relOut, _ := filepath.Rel(strings.Join(fieldPackage, "/"), "/"+typenameToPath(method.Method.GetOutputType()))
if !strings.HasPrefix(relIn, "..") {
relIn = "./" + relIn
}
if !strings.HasPrefix(relOut, "..") {
relOut = "./" + relOut
}
imports.AddImport(relIn, "I"+PrefixReservedWords(classNameIn), "I"+requestTypeFQ)
imports.AddImport(relOut, "I"+PrefixReservedWords(classNameOut), "I"+responseTypeFQ)

verb, path, err := extractPathAndPattern(method.HttpRule.ApiOptions)
// on err, we have no REST endpoints
if err == nil {
serviceMethods := ServiceMethods{
Name: PrefixReservedWords(method.Name),
RequestTypeLiteral: "I" + requestTypeFQ,
ResponseTypeLiteral: "I" + responseTypeFQ,
RequestTypeLiteral: resolveServiceType(method.Method.GetInputType(), service, imports),
ResponseTypeLiteral: resolveServiceType(method.Method.GetOutputType(), service, imports),
Verb: verb,
Path: path,
Body: method.HttpRule.ApiOptions.GetBody(),
Body: cleanFieldName(method.HttpRule.ApiOptions.GetBody()),
LeadingComments: multilineComment(method.Info.GetLeadingComments()),
TrailingComment: method.Info.GetTrailingComments(),
}
Expand All @@ -120,6 +103,43 @@ func prepareServiceType(service sourceinfo.ServiceInfo, imports ImportMap) Servi
return serviceType
}

func resolveServiceType(typeName string, service sourceinfo.ServiceInfo, imports ImportMap) string {
// WELL KNOWN

if isWellKnownType(typeName) {
ts := strings.Split(typeName, ".")
name := ts[len(ts)-1]

// ANY
if name == "Any" {
imports.AddImport("@furo/open-models/dist/index", "type IAny", "")
return "IAny"
}

// Empty
if name == "Empty" {
return "Record<string, never>"
}

primitiveType := WellKnownTypesMap[name]
// imports.AddImport("@furo/open-models/dist/index", name, "")
return primitiveType
}

// Any
// Empty

// regular message type
classNameIn := allTypes[typeName].Name
fieldPackage := strings.Split("."+service.Package, ".")
rel, _ := filepath.Rel(strings.Join(fieldPackage, "/"), "/"+typenameToPath(typeName))
if !strings.HasPrefix(rel, "..") {
rel = "./" + rel
}
imports.AddImport(rel, "I"+PrefixReservedWords(classNameIn), "I"+fullQualifiedTypeName(typeName))
return "I" + fullQualifiedTypeName(typeName)
}

func baseTypeName(typeName string) string {
ts := strings.Split(typeName, ".")
return ts[len(ts)-1]
Expand Down
4 changes: 3 additions & 1 deletion protoc-gen-open-models/pkg/generator/generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,9 @@ func GenerateAll(responseWriter protoplugin.ResponseWriter, request protoplugin.

}

for _, fileDescriptorProto := range request.FileDescriptorProtosToGenerate() {
// generate with all dependencies
// for _, fileDescriptorProto := range request.FileDescriptorProtosToGenerate() {
for _, fileDescriptorProto := range request.AllFileDescriptorProtos() {
/*if strings.HasPrefix(fileDescriptorProto.GetPackage(), "openapi.v3") {
continue
}*/
Expand Down
6 changes: 6 additions & 0 deletions protoc-gen-open-models/pkg/generator/modelTypeResolver.go
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,9 @@ func resolveModelType(imports ImportMap, field sourceinfo.FieldInfo) (
imports.AddImport("@furo/open-models/dist/index", "ANY", "")
return "ANY", "__TypeSetter", "IAny", "ANY", "", "ANY"
}

// TODO: Empty

primitiveMapType := WellKnownTypesMap[typeName]

// for model types return "MAP<string, STRING, string>;"
Expand Down Expand Up @@ -151,6 +154,9 @@ func resolveModelType(imports ImportMap, field sourceinfo.FieldInfo) (
imports.AddImport("@furo/open-models/dist/index", "ANY", "")
return "ANY", "__TypeSetter", "IAny", "ANY", "", "ANY"
}

// TODO: Empty

primitiveType := WellKnownTypesMap[typeName]
imports.AddImport("@furo/open-models/dist/index", typeName, "")
return typeName, "__TypeSetter", primitiveType + "| null", typeName, "", typeName
Expand Down
4 changes: 4 additions & 0 deletions protoc-gen-open-models/pkg/generator/typeResolver.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,8 @@ func resolveInterfaceType(imports ImportMap, field sourceinfo.FieldInfo, kindPre
return "IAny"
}

// TODO: Empty

// well known types are using primitives
primitiveMapType := WellKnownTypesMap[typeName]
imports.AddImport("@furo/open-models/dist/index", typeName, "")
Expand Down Expand Up @@ -100,6 +102,8 @@ func resolveInterfaceType(imports ImportMap, field sourceinfo.FieldInfo, kindPre
return "IAny"
}

// TODO: Empty

// well known types are using primitives
primitiveType := WellKnownTypesMap[typeName]
imports.AddImport("@furo/open-models/dist/index", typeName, "")
Expand Down

0 comments on commit 7da1bd1

Please sign in to comment.