You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
1.9 KiB
71 lines
1.9 KiB
package generator
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
type ParamsBase struct {
|
|
ImportPrefix string // String to prefix to imported package file names.
|
|
ImportMap map[string]string // Mapping from .proto file name to import path.
|
|
//Tpl bool // generate service implementation template
|
|
ExplicitHTTP bool // Only generate for method that add http option
|
|
}
|
|
|
|
type GeneratorParamsInterface interface {
|
|
GetBase() *ParamsBase
|
|
SetParam(key string, value string) error
|
|
}
|
|
|
|
type BasicParam struct{ ParamsBase }
|
|
|
|
func (b *BasicParam) GetBase() *ParamsBase {
|
|
return &b.ParamsBase
|
|
}
|
|
func (b *BasicParam) SetParam(key string, value string) error {
|
|
return nil
|
|
}
|
|
|
|
func ParseGeneratorParams(parameter string, result GeneratorParamsInterface) error {
|
|
ps := make(map[string]string)
|
|
for _, p := range strings.Split(parameter, ",") {
|
|
if p == "" {
|
|
continue
|
|
}
|
|
i := strings.Index(p, "=")
|
|
if i < 0 {
|
|
return fmt.Errorf("invalid parameter %q: expected format of parameter to be k=v", p)
|
|
}
|
|
k := p[0:i]
|
|
v := p[i+1:]
|
|
if v == "" {
|
|
return fmt.Errorf("invalid parameter %q: expected format of parameter to be k=v", k)
|
|
}
|
|
ps[k] = v
|
|
}
|
|
|
|
if result.GetBase().ImportMap == nil {
|
|
result.GetBase().ImportMap = map[string]string{}
|
|
}
|
|
for k, v := range ps {
|
|
switch {
|
|
case k == "explicit_http":
|
|
if v == "true" || v == "1" {
|
|
result.GetBase().ExplicitHTTP = true
|
|
}
|
|
case k == "import_prefix":
|
|
result.GetBase().ImportPrefix = v
|
|
// Support import map 'M' prefix per https://github.com/golang/protobuf/blob/6fb5325/protoc-gen-go/generator/generator.go#L497.
|
|
case len(k) > 0 && k[0] == 'M':
|
|
result.GetBase().ImportMap[k[1:]] = v // 1 is the length of 'M'.
|
|
case len(k) > 0 && strings.HasPrefix(k, "go_import_mapping@"):
|
|
result.GetBase().ImportMap[k[18:]] = v // 18 is the length of 'go_import_mapping@'.
|
|
default:
|
|
e := result.SetParam(k, v)
|
|
if e != nil {
|
|
return e
|
|
}
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|