github.com/nikron/prototool@v1.3.0/internal/protostrs/protostrs.go (about)

     1  // Copyright (c) 2018 Uber Technologies, Inc.
     2  //
     3  // Permission is hereby granted, free of charge, to any person obtaining a copy
     4  // of this software and associated documentation files (the "Software"), to deal
     5  // in the Software without restriction, including without limitation the rights
     6  // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
     7  // copies of the Software, and to permit persons to whom the Software is
     8  // furnished to do so, subject to the following conditions:
     9  //
    10  // The above copyright notice and this permission notice shall be included in
    11  // all copies or substantial portions of the Software.
    12  //
    13  // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    14  // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    15  // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    16  // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    17  // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    18  // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    19  // THE SOFTWARE.
    20  
    21  // Package protostrs contains common string manipulation functionality for
    22  // Protobuf packages and files.
    23  //
    24  // This is used in the format, lint, and create packages. The Java rules in this
    25  // package roughly follow https://cloud.google.com/apis/design/file_structure.
    26  package protostrs
    27  
    28  import (
    29  	"path/filepath"
    30  	"strings"
    31  
    32  	"github.com/uber/prototool/internal/strs"
    33  )
    34  
    35  // GoPackage returns the value for the file option "go_package" given
    36  // a package name. This will be equal to the last value of the package
    37  // separated by "."s, followed by "pb". If packageName is empty,
    38  // this will return an empty string.
    39  func GoPackage(packageName string) string {
    40  	if packageName == "" {
    41  		return ""
    42  	}
    43  	split := strings.Split(packageName, ".")
    44  	return split[len(split)-1] + "pb"
    45  }
    46  
    47  // JavaOuterClassname returns the value for the file option
    48  // "java_outer_classname" given a file name. This will be equal to the
    49  // basename of the file with it's extension stripped, UpperCamelCased,
    50  // followed by "Proto". If filename is empty, this will return an empty
    51  // string.
    52  func JavaOuterClassname(filename string) string {
    53  	if filename == "" {
    54  		return ""
    55  	}
    56  	filename = filepath.Base(filename)
    57  	filename = strings.TrimSuffix(filename, filepath.Ext(filename))
    58  	return strs.ToUpperCamelCase(filename) + "Proto"
    59  }
    60  
    61  // JavaPackage returns the value for the file option "java_package" given
    62  // a package name. This will be equal to "com." followed by the package.
    63  // If packageName is empty, this will return an empty string.
    64  func JavaPackage(packageName string) string {
    65  	if packageName == "" {
    66  		return ""
    67  	}
    68  	return "com." + packageName
    69  }