123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- // Copyright 2018 Twitch Interactive, Inc. All Rights Reserved.
- //
- // Licensed under the Apache License, Version 2.0 (the "License"). You may not
- // use this file except in compliance with the License. A copy of the License is
- // located at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // or in the "license" file accompanying this file. This file is distributed on
- // an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
- // express or implied. See the License for the specific language governing
- // permissions and limitations under the License.
- package main
- import (
- "fmt"
- "strings"
- )
- type commandLineParams 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 grpc compatible interface
- }
- // parseCommandLineParams breaks the comma-separated list of key=value pairs
- // in the parameter (a member of the request protobuf) into a key/value map.
- // It then sets command line parameter mappings defined by those entries.
- func parseCommandLineParams(parameter string) (*commandLineParams, error) {
- ps := make(map[string]string)
- for _, p := range strings.Split(parameter, ",") {
- if p == "" {
- continue
- }
- i := strings.Index(p, "=")
- if i < 0 {
- return nil, 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 nil, fmt.Errorf("invalid parameter %q: expected format of parameter to be k=v", k)
- }
- ps[k] = v
- }
- clp := &commandLineParams{
- importMap: make(map[string]string),
- }
- for k, v := range ps {
- switch {
- case k == "tpl":
- if v == "true" || v == "1" {
- clp.tpl = true
- }
- case k == "import_prefix":
- clp.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':
- clp.importMap[k[1:]] = v // 1 is the length of 'M'.
- case len(k) > 0 && strings.HasPrefix(k, "go_import_mapping@"):
- clp.importMap[k[18:]] = v // 18 is the length of 'go_import_mapping@'.
- default:
- return nil, fmt.Errorf("unknown parameter %q", k)
- }
- }
- return clp, nil
- }
|