Merge pull request #91 from hasAdamr/new-server-handler
New server handler parser; Checks receiver, updates ins and outs, ignores unexported funcs, with lots of tests!
This commit is contained in:
Коммит
06f121104b
|
@ -1,209 +0,0 @@
|
|||
package astmodifier
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"go/ast"
|
||||
_ "go/format"
|
||||
"go/parser"
|
||||
"go/printer"
|
||||
"go/token"
|
||||
"io"
|
||||
"os"
|
||||
|
||||
log "github.com/Sirupsen/logrus"
|
||||
)
|
||||
|
||||
func init() {
|
||||
log.SetLevel(log.InfoLevel)
|
||||
log.SetOutput(os.Stderr)
|
||||
log.SetFormatter(&log.TextFormatter{
|
||||
ForceColors: true,
|
||||
})
|
||||
}
|
||||
|
||||
type astModifier struct {
|
||||
fset *token.FileSet
|
||||
fileAst ast.Node
|
||||
funcIndexer *functionIndexer
|
||||
funcRemover *functionRemover
|
||||
interfaceRemover *interfaceRemover
|
||||
}
|
||||
|
||||
type functionRemover struct {
|
||||
functionsToKeep map[string]bool
|
||||
}
|
||||
|
||||
type functionIndexer struct {
|
||||
functionIndex map[string]bool
|
||||
}
|
||||
|
||||
type interfaceRemover struct {
|
||||
interfaceToRemove string
|
||||
}
|
||||
|
||||
// New returns a new astModifier from a source file which modifies code intelligently
|
||||
func NewFromFile(sourcePath string) *astModifier {
|
||||
fset := token.NewFileSet()
|
||||
fileAst, err := parser.ParseFile(fset, sourcePath, nil, parser.ParseComments)
|
||||
if err != nil {
|
||||
log.WithError(err).Fatal("server/service.go could not be parsed by go/parser into AST")
|
||||
}
|
||||
|
||||
return &astModifier{
|
||||
fset: fset,
|
||||
fileAst: fileAst,
|
||||
funcIndexer: &functionIndexer{
|
||||
functionIndex: make(map[string]bool),
|
||||
},
|
||||
funcRemover: &functionRemover{
|
||||
functionsToKeep: make(map[string]bool),
|
||||
},
|
||||
interfaceRemover: &interfaceRemover{
|
||||
interfaceToRemove: "",
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
// New returns a new astModifier from a source file which modifies code intelligently
|
||||
func New(source io.Reader) *astModifier {
|
||||
fset := token.NewFileSet()
|
||||
fileAst, err := parser.ParseFile(fset, "", source, parser.ParseComments)
|
||||
if err != nil {
|
||||
log.WithError(err).Fatal("server/service.go could not be parsed by go/parser into AST")
|
||||
}
|
||||
|
||||
return &astModifier{
|
||||
fset: fset,
|
||||
fileAst: fileAst,
|
||||
funcIndexer: &functionIndexer{
|
||||
functionIndex: make(map[string]bool),
|
||||
},
|
||||
funcRemover: &functionRemover{
|
||||
functionsToKeep: make(map[string]bool),
|
||||
},
|
||||
interfaceRemover: &interfaceRemover{
|
||||
interfaceToRemove: "",
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
// String returns the current ast as a string
|
||||
func (a *astModifier) String() string {
|
||||
code := bytes.NewBuffer(nil)
|
||||
err := printer.Fprint(code, a.fset, a.fileAst)
|
||||
|
||||
if err != nil {
|
||||
log.Fatal("Ast could not output code")
|
||||
}
|
||||
|
||||
return code.String()
|
||||
}
|
||||
|
||||
// String returns the current ast as a string
|
||||
func (a *astModifier) Buffer() *bytes.Buffer {
|
||||
code := bytes.NewBuffer(nil)
|
||||
err := printer.Fprint(code, a.fset, a.fileAst)
|
||||
|
||||
if err != nil {
|
||||
log.Fatal("Ast could not output code")
|
||||
}
|
||||
|
||||
return code
|
||||
}
|
||||
|
||||
// RemoveFunctionsExecpt takes a []string of function names to keep
|
||||
// All other functions are removed from source file
|
||||
func (a *astModifier) RemoveFunctionsExecpt(functionsToKeep []string) {
|
||||
a.funcRemover.functionsToKeep = make(map[string]bool)
|
||||
|
||||
for _, fun := range functionsToKeep {
|
||||
a.funcRemover.functionsToKeep[fun] = true
|
||||
}
|
||||
ast.Walk(a.funcRemover, a.fileAst)
|
||||
// Clear the functionToKeep map for next run
|
||||
}
|
||||
|
||||
func (a *astModifier) IndexFunctions() map[string]bool {
|
||||
a.funcIndexer.functionIndex = make(map[string]bool)
|
||||
ast.Walk(a.funcIndexer, a.fileAst)
|
||||
// Clear the functionIndex for next run
|
||||
return a.funcIndexer.functionIndex
|
||||
}
|
||||
|
||||
func (a *astModifier) RemoveInterface(interfaceToRemove string) {
|
||||
a.interfaceRemover.interfaceToRemove = ""
|
||||
a.interfaceRemover.interfaceToRemove = interfaceToRemove
|
||||
ast.Walk(a.interfaceRemover, a.fileAst)
|
||||
}
|
||||
|
||||
func (v *interfaceRemover) Visit(node ast.Node) ast.Visitor {
|
||||
interfaceFound := false
|
||||
var declareIndexToDelete int
|
||||
if file, ok := node.(*ast.File); ok {
|
||||
log.WithField(
|
||||
"File Name", file.Name,
|
||||
).Debug("AST File")
|
||||
for i, decs := range file.Decls {
|
||||
switch specDec := decs.(type) {
|
||||
case *ast.GenDecl:
|
||||
if !interfaceFound {
|
||||
for _, spec := range specDec.Specs {
|
||||
if typeSpec, ok := spec.(*ast.TypeSpec); ok {
|
||||
if interfaceType, ok := typeSpec.Type.(*ast.InterfaceType); ok {
|
||||
log.Debug("InterfaceFound")
|
||||
_ = interfaceType
|
||||
if typeSpec.Name.String() == v.interfaceToRemove {
|
||||
declareIndexToDelete = i
|
||||
interfaceFound = true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if interfaceFound {
|
||||
file.Decls = append(file.Decls[:declareIndexToDelete], file.Decls[declareIndexToDelete+1:]...)
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (v *functionIndexer) Visit(node ast.Node) ast.Visitor {
|
||||
var funcsToDelete []int
|
||||
_ = funcsToDelete
|
||||
if file, ok := node.(*ast.File); ok {
|
||||
for i, decs := range file.Decls {
|
||||
_ = i
|
||||
switch specDec := decs.(type) {
|
||||
case *ast.FuncDecl:
|
||||
v.functionIndex[specDec.Name.String()] = true
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (v *functionRemover) Visit(node ast.Node) ast.Visitor {
|
||||
var funcsToDelete []int
|
||||
if file, ok := node.(*ast.File); ok {
|
||||
log.WithField(
|
||||
"File Name", file.Name,
|
||||
).Debug("AST File")
|
||||
|
||||
for i, decs := range file.Decls {
|
||||
switch specDec := decs.(type) {
|
||||
case *ast.FuncDecl:
|
||||
funcName := specDec.Name.String()
|
||||
if v.functionsToKeep[funcName] == false {
|
||||
log.WithField("Method", funcName).Info("Handler does not exist in proto service description, deleting...")
|
||||
funcsToDelete = append(funcsToDelete, i)
|
||||
}
|
||||
}
|
||||
}
|
||||
for _, index := range funcsToDelete {
|
||||
file.Decls = append(file.Decls[:index], file.Decls[index+1:]...)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
|
@ -1,3 +1,4 @@
|
|||
// Package generator generates a gokit service based on a service definition.
|
||||
package generator
|
||||
|
||||
import (
|
||||
|
@ -13,8 +14,8 @@ import (
|
|||
"github.com/pkg/errors"
|
||||
|
||||
"github.com/TuneLab/go-truss/gengokit"
|
||||
"github.com/TuneLab/go-truss/gengokit/astmodifier"
|
||||
templateFileAssets "github.com/TuneLab/go-truss/gengokit/template"
|
||||
"github.com/TuneLab/go-truss/gengokit/handler"
|
||||
templFiles "github.com/TuneLab/go-truss/gengokit/template"
|
||||
|
||||
"github.com/TuneLab/go-truss/svcdef"
|
||||
"github.com/TuneLab/go-truss/truss"
|
||||
|
@ -34,7 +35,7 @@ func init() {
|
|||
func GenerateGokit(sd *svcdef.Svcdef, conf gengokit.Config) ([]truss.NamedReadWriter, error) {
|
||||
te, err := gengokit.NewTemplateExecutor(sd, conf)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "could not create template executor")
|
||||
return nil, errors.Wrap(err, "cannot create template executor")
|
||||
}
|
||||
|
||||
fpm := make(map[string]io.Reader, len(conf.PreviousFiles))
|
||||
|
@ -44,10 +45,10 @@ func GenerateGokit(sd *svcdef.Svcdef, conf gengokit.Config) ([]truss.NamedReadWr
|
|||
|
||||
var codeGenFiles []truss.NamedReadWriter
|
||||
|
||||
for _, templFP := range templateFileAssets.AssetNames() {
|
||||
for _, templFP := range templFiles.AssetNames() {
|
||||
file, err := generateResponseFile(templFP, te, fpm)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "could not render template")
|
||||
return nil, errors.Wrap(err, "cannot render template")
|
||||
}
|
||||
if file == nil {
|
||||
continue
|
||||
|
@ -70,32 +71,24 @@ func generateResponseFile(templFP string, te *gengokit.TemplateExecutor, prevGen
|
|||
|
||||
// Get the actual path to the file rather than the template file path
|
||||
actualFP := templatePathToActual(templFP, te.PackageName)
|
||||
|
||||
// Map of template paths to template rendering functions
|
||||
renderTempl := map[string]string{
|
||||
"NAME-service/handlers/server/server_handler.gotemplate": serverMethods,
|
||||
}
|
||||
|
||||
// If we are rendering a template with a renderFunc and the file existed
|
||||
// previously then use that function
|
||||
if templ := renderTempl[templFP]; templ != "" {
|
||||
// If we are rendering the server and or the client
|
||||
if templFP == "NAME-service/handlers/server/server_handler.gotemplate" {
|
||||
file := prevGenMap[actualFP]
|
||||
if file != nil {
|
||||
genCode, err = updateMethods(file, []byte(templ), te)
|
||||
h, err := handler.New(te.Service, file, te.PackageName)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "cannot parse previous handler: %q", actualFP)
|
||||
}
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "could not render template")
|
||||
if genCode, err = h.Render(templFP, te); err != nil {
|
||||
return nil, errors.Wrap(err, "cannot render template")
|
||||
}
|
||||
}
|
||||
|
||||
// if no code has been generated just apply the template
|
||||
if genCode == nil {
|
||||
genCode, err = applyTemplateFromPath(templFP, te)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "could not render template")
|
||||
if genCode, err = applyTemplateFromPath(templFP, te); err != nil {
|
||||
return nil, errors.Wrap(err, "cannot render template")
|
||||
}
|
||||
}
|
||||
|
||||
codeBytes, err := ioutil.ReadAll(genCode)
|
||||
|
@ -111,8 +104,7 @@ func generateResponseFile(templFP string, te *gengokit.TemplateExecutor, prevGen
|
|||
|
||||
// Set the path to the file and write the code to the file
|
||||
resp.Path = actualFP
|
||||
_, err = resp.Write(formattedCode)
|
||||
if err != nil {
|
||||
if _, err = resp.Write(formattedCode); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
|
@ -132,47 +124,9 @@ func templatePathToActual(templFilePath, packageName string) string {
|
|||
return actual
|
||||
}
|
||||
|
||||
func updateMethods(handler io.Reader, templ []byte, te *gengokit.TemplateExecutor) (io.Reader, error) {
|
||||
svcFuncs := serviceFunctionsNames(te.Service.Methods)
|
||||
|
||||
astMod := astmodifier.New(handler)
|
||||
|
||||
astMod.RemoveFunctionsExecpt(svcFuncs)
|
||||
|
||||
// Index handler functions, apply handler template for all function in
|
||||
// service definition that are not defined in handler
|
||||
currentFuncs := astMod.IndexFunctions()
|
||||
code := astMod.Buffer()
|
||||
|
||||
trimmedTe := te.TrimServiceFuncs(currentFuncs)
|
||||
|
||||
newFuncs, err := applyTemplate(templ, "", trimmedTe)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "unable to apply methods template")
|
||||
}
|
||||
|
||||
code.ReadFrom(newFuncs)
|
||||
|
||||
return code, nil
|
||||
}
|
||||
|
||||
// serviceFunctionNames returns a slice of function names which are in the
|
||||
// definition files plus the function "NewService". Used for inserting and
|
||||
// removing functions from previously generated handler files
|
||||
func serviceFunctionsNames(methods []*svcdef.ServiceMethod) []string {
|
||||
var svcFuncs []string
|
||||
for _, m := range methods {
|
||||
svcFuncs = append(svcFuncs, m.Name)
|
||||
}
|
||||
svcFuncs = append(svcFuncs, "NewService")
|
||||
|
||||
return svcFuncs
|
||||
|
||||
}
|
||||
|
||||
// applyTemplateFromPath calls applyTemplate with the template at templFilePath
|
||||
func applyTemplateFromPath(templFilePath string, executor *gengokit.TemplateExecutor) (io.Reader, error) {
|
||||
templBytes, err := templateFileAssets.Asset(templFilePath)
|
||||
templBytes, err := templFiles.Asset(templFilePath)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "unable to find template file: %v", templFilePath)
|
||||
}
|
||||
|
@ -185,7 +139,7 @@ func applyTemplate(templBytes []byte, templName string, executor *gengokit.Templ
|
|||
|
||||
codeTemplate, err := template.New(templName).Funcs(executor.FuncMap).Parse(templateString)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "could not create template")
|
||||
return nil, errors.Wrap(err, "cannot create template")
|
||||
}
|
||||
|
||||
outputBuffer := bytes.NewBuffer(nil)
|
||||
|
@ -210,21 +164,5 @@ func formatCode(code []byte) []byte {
|
|||
}
|
||||
|
||||
return formatted
|
||||
}
|
||||
|
||||
var serverMethods string = `
|
||||
{{ with $te := .}}
|
||||
{{range $i := $te.Service.Methods}}
|
||||
// {{.GetName}} implements Service.
|
||||
func (s {{$te.PackageName}}Service) {{.GetName}}(ctx context.Context, in *pb.{{GoName .RequestType.GetName}}) (*pb.{{GoName .ResponseType.GetName}}, error){
|
||||
var resp pb.{{GoName .ResponseType.GetName}}
|
||||
resp = pb.{{GoName .ResponseType.GetName}}{
|
||||
{{range $j := $i.ResponseType.Message.Fields -}}
|
||||
// {{GoName $j.GetName}}:
|
||||
{{end -}}
|
||||
}
|
||||
return &resp, nil
|
||||
}
|
||||
{{end}}
|
||||
{{- end}}
|
||||
`
|
||||
}
|
||||
|
|
|
@ -7,14 +7,18 @@ import (
|
|||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/TuneLab/go-truss/svcdef"
|
||||
log "github.com/Sirupsen/logrus"
|
||||
"github.com/pkg/errors"
|
||||
|
||||
"github.com/TuneLab/go-truss/gengokit"
|
||||
"github.com/TuneLab/go-truss/gengokit/handler"
|
||||
templateFileAssets "github.com/TuneLab/go-truss/gengokit/template"
|
||||
"github.com/TuneLab/go-truss/svcdef"
|
||||
|
||||
log "github.com/Sirupsen/logrus"
|
||||
"github.com/TuneLab/go-truss/gengokit/gentesthelper"
|
||||
)
|
||||
|
||||
var gopath []string
|
||||
|
@ -24,11 +28,10 @@ func init() {
|
|||
}
|
||||
|
||||
func init() {
|
||||
log.SetLevel(log.FatalLevel)
|
||||
log.SetLevel(log.DebugLevel)
|
||||
}
|
||||
|
||||
func TestTemplatePathToActual(t *testing.T) {
|
||||
|
||||
pathToWants := map[string]string{
|
||||
"NAME-service/": "package-service/",
|
||||
"NAME-service/test.gotemplate": "package-service/test.go",
|
||||
|
@ -104,94 +107,6 @@ func TestApplyTemplateFromPath(t *testing.T) {
|
|||
|
||||
}
|
||||
|
||||
func TestTrimTemplateExecutorServiceFuncs(t *testing.T) {
|
||||
const goPackage = "github.com/TuneLab/go-truss/gengokit"
|
||||
|
||||
const def = `
|
||||
syntax = "proto3";
|
||||
|
||||
// General package
|
||||
package general;
|
||||
|
||||
import "google.golang.org/genproto/googleapis/api/serviceconfig/annotations.proto";
|
||||
|
||||
// RequestMessage is so foo
|
||||
message RequestMessage {
|
||||
string input = 1;
|
||||
}
|
||||
|
||||
// ResponseMessage is so bar
|
||||
message ResponseMessage {
|
||||
string output = 1;
|
||||
}
|
||||
|
||||
// ProtoService is a service
|
||||
service ProtoService {
|
||||
// ProtoMethod is simple. Like a gopher.
|
||||
rpc ProtoMethod (RequestMessage) returns (ResponseMessage) {
|
||||
// No {} in path and no body, everything is in the query
|
||||
option (google.api.http) = {
|
||||
get: "/route"
|
||||
};
|
||||
}
|
||||
// ProtoMethodAgain is simple. Like a gopher again.
|
||||
rpc ProtoMethodAgain (RequestMessage) returns (ResponseMessage) {
|
||||
// No {} in path and no body, everything is in the query
|
||||
option (google.api.http) = {
|
||||
get: "/route2"
|
||||
};
|
||||
}
|
||||
// ProtoMethodAgain is simple. Like a gopher again.
|
||||
rpc ProtoMethodAgainAgain (RequestMessage) returns (ResponseMessage) {
|
||||
// No {} in path and no body, everything is in the query
|
||||
option (google.api.http) = {
|
||||
get: "/route3"
|
||||
};
|
||||
}
|
||||
}
|
||||
`
|
||||
|
||||
defMethNames := map[string]bool{
|
||||
"ProtoMethod": true,
|
||||
"ProtoMethodAgain": true,
|
||||
"ProtoMethodAgainAgain": true,
|
||||
}
|
||||
|
||||
te, err := stringToTemplateExector(def, goPackage)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if got, want := len(te.Service.Methods), 3; got != want {
|
||||
t.Fatalf("Got %d methods, wanted %d", got, want)
|
||||
}
|
||||
|
||||
teEmpty := te.TrimServiceFuncs(defMethNames)
|
||||
if got, want := len(teEmpty.Service.Methods), 0; got != want {
|
||||
t.Fatalf("Got %d methods, wanted %d", got, want)
|
||||
}
|
||||
|
||||
defMethNames["ProtoMethodAgain"] = false
|
||||
teOnlyAgain := te.TrimServiceFuncs(defMethNames)
|
||||
if got, want := len(teOnlyAgain.Service.Methods), 1; got != want {
|
||||
t.Fatalf("Got %d methods, wanted %d", got, want)
|
||||
}
|
||||
|
||||
teOnlyAgainMeths := svcMethodsNames(teOnlyAgain.Service.Methods)
|
||||
got := teOnlyAgainMeths[0]
|
||||
want := "ProtoMethodAgain"
|
||||
if got != want {
|
||||
t.Fatalf("Got `%s` method, wanted `%s`", got, want)
|
||||
}
|
||||
|
||||
emptyMeths := make(map[string]bool, 0)
|
||||
teFull := te.TrimServiceFuncs(emptyMeths)
|
||||
if got, want := len(teFull.Service.Methods), 3; got != want {
|
||||
t.Fatalf("Got %d methods, wanted %d", got, want)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func svcMethodsNames(methods []*svcdef.ServiceMethod) []string {
|
||||
var mNames []string
|
||||
for _, m := range methods {
|
||||
|
@ -221,95 +136,6 @@ func stringToTemplateExector(def, importPath string) (*gengokit.TemplateExecutor
|
|||
|
||||
}
|
||||
|
||||
func TestUpdateMethods(t *testing.T) {
|
||||
const def = `
|
||||
syntax = "proto3";
|
||||
|
||||
// General package
|
||||
package general;
|
||||
|
||||
import "google.golang.org/genproto/googleapis/api/serviceconfig/annotations.proto";
|
||||
|
||||
// RequestMessage is so foo
|
||||
message RequestMessage {
|
||||
string input = 1;
|
||||
}
|
||||
|
||||
// ResponseMessage is so bar
|
||||
message ResponseMessage {
|
||||
string output = 1;
|
||||
}
|
||||
|
||||
// ProtoService is a service
|
||||
service ProtoService {
|
||||
// ProtoMethod is simple. Like a gopher.
|
||||
rpc ProtoMethod (RequestMessage) returns (ResponseMessage) {
|
||||
// No {} in path and no body, everything is in the query
|
||||
option (google.api.http) = {
|
||||
get: "/route"
|
||||
};
|
||||
}
|
||||
}
|
||||
`
|
||||
|
||||
sd, err := svcdef.NewFromString(def, gopath)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
conf := gengokit.Config{
|
||||
GoPackage: "github.com/TuneLab/go-truss/gengokit",
|
||||
PBPackage: "github.com/TuneLab/go-truss/gengokit/general-service",
|
||||
}
|
||||
|
||||
te, err := gengokit.NewTemplateExecutor(sd, conf)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// apply server_handler.go template
|
||||
sh, err := applyTemplateFromPath("NAME-service/handlers/server/server_handler.gotemplate", te)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// read the code off the io.Reader
|
||||
shCode, err := ioutil.ReadAll(sh)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// format the code
|
||||
shCode, err = testFormat(shCode)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// updateServerMethods with the same templateExecutor
|
||||
same, err := updateMethods(bytes.NewReader(shCode), []byte(serverMethods), te)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// read the new code off the io.Reader
|
||||
sameCode, err := ioutil.ReadAll(same)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// format that new code
|
||||
sameCode, err = testFormat(sameCode)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// make sure the code is the same
|
||||
if bytes.Compare(shCode, sameCode) != 0 {
|
||||
t.Fatalf("\n__BEFORE__\n\n%s\n\n__AFTER__\n\n%s\n\nCode before and after updating differs",
|
||||
string(shCode), string(sameCode))
|
||||
}
|
||||
}
|
||||
|
||||
func TestAllTemplates(t *testing.T) {
|
||||
const goPackage = "github.com/TuneLab/go-truss/gengokit"
|
||||
const goPBPackage = "github.com/TuneLab/go-truss/gengokit/general-service"
|
||||
|
@ -423,12 +249,12 @@ func TestAllTemplates(t *testing.T) {
|
|||
|
||||
secondCode, err := testGenerateResponseFile(templFP, te, prevGenMap)
|
||||
if err != nil {
|
||||
t.Fatalf("%v failed to format on second identical generation\n\nERROR:\n\n%v\n\nCODE:\n\n%v", templFP, err.Error(), string(secondCode))
|
||||
t.Fatalf("%v failed to format on second identical generation\n\nERROR: %v\nCODE:\n\n%v",
|
||||
templFP, err.Error(), string(secondCode))
|
||||
}
|
||||
|
||||
if bytes.Compare(firstCode, secondCode) != 0 {
|
||||
t.Fatalf("\n__BEFORE__\n\n%v\n\n__AFTER\n\n%v\n\nCode differs after being regenerated with same definition file",
|
||||
string(firstCode), string(secondCode))
|
||||
t.Fatal("Generated code differs after regeneration with same definition\n" + gentesthelper.DiffStrings(string(firstCode), string(secondCode)))
|
||||
}
|
||||
|
||||
// store the file to act to pass back to testGenerateResponseFile for third generation
|
||||
|
@ -437,7 +263,8 @@ func TestAllTemplates(t *testing.T) {
|
|||
// pass in templateExecutor created from def2
|
||||
addRPCCode, err := testGenerateResponseFile(templFP, te2, prevGenMap)
|
||||
if err != nil {
|
||||
t.Fatalf("%v failed to format on third generation with 1 rpc added\n\nERROR:\n\n%v\n\nCODE:\n\n%v", templFP, err.Error(), string(addRPCCode))
|
||||
t.Fatalf("%v failed to format on third generation with 1 rpc added\n\nERROR: %v\nCODE:\n\n%v",
|
||||
templFP, err.Error(), string(addRPCCode))
|
||||
}
|
||||
|
||||
// store the file to act to pass back to testGenerateResponseFile for forth generation
|
||||
|
@ -446,11 +273,179 @@ func TestAllTemplates(t *testing.T) {
|
|||
// pass in templateExecutor create from def1
|
||||
_, err = testGenerateResponseFile(templFP, te, prevGenMap)
|
||||
if err != nil {
|
||||
t.Fatalf("%v failed to format on forth generation with 1 rpc removed\n\nERROR:\n\n%v\n\nCODE:\n\n%v", templFP, err.Error(), string(addRPCCode))
|
||||
t.Fatalf("%v failed to format on forth generation with 1 rpc removed\n\nERROR: %v\nCODE:\n\n%v",
|
||||
templFP, err.Error(), string(addRPCCode))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestUpdateMethods(t *testing.T) {
|
||||
const def = `
|
||||
syntax = "proto3";
|
||||
|
||||
// General package
|
||||
package general;
|
||||
|
||||
import "google.golang.org/genproto/googleapis/api/serviceconfig/annotations.proto";
|
||||
|
||||
// RequestMessage is so foo
|
||||
message RequestMessage {
|
||||
string input = 1;
|
||||
}
|
||||
|
||||
// ResponseMessage is so bar
|
||||
message ResponseMessage {
|
||||
string output = 1;
|
||||
}
|
||||
|
||||
// RequestMessage is so foo
|
||||
message DifferentRequest {
|
||||
float green = 1;
|
||||
}
|
||||
|
||||
message DifferentResponse {
|
||||
int64 blue = 1;
|
||||
}
|
||||
|
||||
// ProtoService is a service
|
||||
service ProtoService {
|
||||
// ProtoMethod is simple. Like a gopher.
|
||||
rpc ProtoMethod (RequestMessage) returns (ResponseMessage) {
|
||||
// No {} in path and no body, everything is in the query
|
||||
option (google.api.http) = {
|
||||
get: "/route"
|
||||
};
|
||||
}
|
||||
// ProtoMethodAgain is simple. Like a gopher again.
|
||||
rpc ProtoMethodAgain (RequestMessage) returns (ResponseMessage) {
|
||||
// No {} in path and no body, everything is in the query
|
||||
option (google.api.http) = {
|
||||
get: "/route2"
|
||||
};
|
||||
}
|
||||
// ProtoMethodAgainAgain is simple. Like a gopher again again.
|
||||
rpc ProtoMethodAgainAgain (RequestMessage) returns (ResponseMessage) {
|
||||
// No {} in path and no body, everything is in the query
|
||||
option (google.api.http) = {
|
||||
get: "/route2"
|
||||
};
|
||||
}
|
||||
}
|
||||
`
|
||||
|
||||
sd, err := svcdef.NewFromString(def, gopath)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
svc := sd.Service
|
||||
allMethods := svc.Methods
|
||||
|
||||
conf := gengokit.Config{
|
||||
GoPackage: "github.com/TuneLab/go-truss/gengokit",
|
||||
PBPackage: "github.com/TuneLab/go-truss/gengokit/general-service",
|
||||
}
|
||||
|
||||
te, err := gengokit.NewTemplateExecutor(sd, conf)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
testHandlerGeneration := func(templPath string) {
|
||||
svc.Methods = []*svcdef.ServiceMethod{allMethods[0]}
|
||||
firstBytes, err := testGenerateResponseFile(templPath, te, nil)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
firstCode := strings.TrimSpace(string(firstBytes))
|
||||
|
||||
secondCode, err := renderService(svc, firstCode, te, templPath)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if strings.Compare(firstCode, secondCode) != 0 {
|
||||
t.Fatal("Generated code differs after regenerated with same definition\n" +
|
||||
templPath + "\n" +
|
||||
diff(firstCode, secondCode))
|
||||
}
|
||||
|
||||
svc.Methods = append(svc.Methods, allMethods[1])
|
||||
|
||||
thirdCode, err := renderService(svc, secondCode, te, templPath)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if strings.Compare(secondCode, thirdCode) != -1 {
|
||||
t.Fatal("Generated code not longer after regenerated with additional service method\n" +
|
||||
templPath + "\n" +
|
||||
diff(secondCode, thirdCode))
|
||||
}
|
||||
|
||||
// remove the first one rpc
|
||||
svc.Methods = svc.Methods[1:]
|
||||
|
||||
forthCode, err := renderService(svc, thirdCode, te, templPath)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if strings.Compare(thirdCode, forthCode) != 1 {
|
||||
t.Fatal("Generated code not shorter after regenerated with fewer service method\n" +
|
||||
templPath + "\n" +
|
||||
diff(secondCode, thirdCode))
|
||||
}
|
||||
|
||||
svc.Methods = allMethods
|
||||
|
||||
fifthCode, err := renderService(svc, forthCode, te, templPath)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if strings.Compare(forthCode, fifthCode) != -1 {
|
||||
t.Fatal("Generated code not longer after regenerated with additional service method\n" +
|
||||
templPath + "\n" +
|
||||
diff(secondCode, thirdCode))
|
||||
}
|
||||
}
|
||||
testHandlerGeneration("NAME-service/handlers/server/server_handler.gotemplate")
|
||||
}
|
||||
|
||||
func diff(a, b string) string {
|
||||
return gentesthelper.DiffStrings(
|
||||
a,
|
||||
b,
|
||||
)
|
||||
}
|
||||
|
||||
func renderService(svc *svcdef.Service, prev string, te *gengokit.TemplateExecutor, templPath string) (string, error) {
|
||||
h, err := handler.New(svc, strings.NewReader(prev), te.PackageName)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
next, err := h.Render(templPath, te)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
nextBytes, err := ioutil.ReadAll(next)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
nextBytes, err = testFormat(nextBytes)
|
||||
if err != nil {
|
||||
return "", errors.Wrap(err, "cannot format")
|
||||
}
|
||||
|
||||
nextCode := strings.TrimSpace(string(nextBytes))
|
||||
|
||||
return nextCode, nil
|
||||
}
|
||||
|
||||
func testGenerateResponseFile(templFP string, te *gengokit.TemplateExecutor, prevGenMap map[string]io.Reader) ([]byte, error) {
|
||||
// apply server_handler.go template
|
||||
code, err := generateResponseFile(templFP, te, prevGenMap)
|
||||
|
|
|
@ -5,7 +5,6 @@ import (
|
|||
"strings"
|
||||
"text/template"
|
||||
|
||||
log "github.com/Sirupsen/logrus"
|
||||
generatego "github.com/golang/protobuf/protoc-gen-go/generator"
|
||||
|
||||
"github.com/TuneLab/go-truss/gengokit/clientarggen"
|
||||
|
@ -57,29 +56,3 @@ func NewTemplateExecutor(sd *svcdef.Svcdef, conf Config) (*TemplateExecutor, err
|
|||
FuncMap: funcMap,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// trimServiceFuncs removes functions in funcsInFile from the
|
||||
// templateExecutor and returns a pointer to a new templateExecutor
|
||||
func (te TemplateExecutor) TrimServiceFuncs(funcsInFile map[string]bool) *TemplateExecutor {
|
||||
var methodsToTemplate []*svcdef.ServiceMethod
|
||||
|
||||
for _, m := range te.Service.Methods {
|
||||
mName := m.Name
|
||||
|
||||
if funcsInFile[mName] {
|
||||
log.WithField("Method", mName).Info("Handler method already exists")
|
||||
continue
|
||||
}
|
||||
methodsToTemplate = append(methodsToTemplate, m)
|
||||
log.WithField("Method", mName).Info("Rendering template for method")
|
||||
}
|
||||
|
||||
// templateExec's Service is dereference and that new Service's
|
||||
// pointer to its messages is changed to be methodsToTemplate
|
||||
tempService := *te.Service
|
||||
tempService.Methods = methodsToTemplate
|
||||
|
||||
te.Service = &tempService
|
||||
|
||||
return &te
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"bytes"
|
||||
"fmt"
|
||||
"go/ast"
|
||||
"go/format"
|
||||
"go/parser"
|
||||
"go/printer"
|
||||
"go/token"
|
||||
|
@ -62,3 +63,32 @@ func DiffStrings(a, b string) string {
|
|||
text, _ := difflib.GetUnifiedDiffString(t)
|
||||
return text
|
||||
}
|
||||
|
||||
// DiffGoCode returns normalized versions of inA and inB using the go formatter
|
||||
// so that differences in indentation or trailing spaces are ignored. A diff of
|
||||
// inA and inB is also returned.
|
||||
func DiffGoCode(inA, inB string) (outA, outB, diff string) {
|
||||
codeFormat := func(in string) string {
|
||||
// Trim starting and ending space so format starts indenting at 0 for
|
||||
// both strings
|
||||
out := strings.TrimSpace(in)
|
||||
|
||||
// Format code, if we get an error we keep out the same,
|
||||
// otherwise we use the formmated version
|
||||
outBytes, err := format.Source([]byte(out))
|
||||
if err != nil {
|
||||
return "FAILED TO FORMAT\n" + out
|
||||
} else {
|
||||
return string(outBytes)
|
||||
}
|
||||
|
||||
return out
|
||||
}
|
||||
outA = codeFormat(inA)
|
||||
outB = codeFormat(inB)
|
||||
diff = DiffStrings(
|
||||
outA,
|
||||
outB,
|
||||
)
|
||||
return
|
||||
}
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
package gentesthelper
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestDiffGoCode(t *testing.T) {
|
||||
code := []string{
|
||||
// Normal
|
||||
`func Foo() {
|
||||
println("test")
|
||||
}`,
|
||||
// Leading and trailing whitespace
|
||||
`
|
||||
|
||||
func Foo () {
|
||||
println("test")
|
||||
}
|
||||
|
||||
`,
|
||||
// Indentation differences, tabs
|
||||
` func Foo() {
|
||||
println("test")
|
||||
}`,
|
||||
// Indentation differences, spaces
|
||||
` func Foo() {
|
||||
println("test")
|
||||
}
|
||||
`,
|
||||
}
|
||||
|
||||
for _, v := range code {
|
||||
a, b, di := DiffGoCode(code[0], v)
|
||||
if strings.Compare(a, b) != 0 {
|
||||
t.Errorf("Code differs: %s", di)
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,310 @@
|
|||
// Package handler manages the exported methods in the service handler code
|
||||
// adding/removing exported methods to match the service definition.
|
||||
package handler
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"go/ast"
|
||||
"go/parser"
|
||||
"go/printer"
|
||||
"go/token"
|
||||
"io"
|
||||
"strings"
|
||||
"text/template"
|
||||
|
||||
log "github.com/Sirupsen/logrus"
|
||||
generatego "github.com/golang/protobuf/protoc-gen-go/generator"
|
||||
"github.com/pkg/errors"
|
||||
|
||||
"github.com/TuneLab/go-truss/gengokit"
|
||||
"github.com/TuneLab/go-truss/svcdef"
|
||||
)
|
||||
|
||||
// NewService is an exported func that creates a new service
|
||||
// it will not be defined in the service definition but is required
|
||||
const ignoredFunc = "NewService"
|
||||
const serverTemplPath = "NAME-service/handlers/server/server_handler.gotemplate"
|
||||
|
||||
// New returns a truss.Renderable capable of updating server handlers.
|
||||
// New should be passed the previous version of the server handler to parse.
|
||||
func New(svc *svcdef.Service, prev io.Reader, pkgName string) (gengokit.Renderable, error) {
|
||||
var h handler
|
||||
log.WithField("Service Methods", len(svc.Methods)).Debug("Handler being created")
|
||||
h.mMap = newMethodMap(svc.Methods)
|
||||
h.service = svc
|
||||
h.pkgName = pkgName
|
||||
|
||||
if prev == nil {
|
||||
return &h, nil
|
||||
}
|
||||
|
||||
h.fset = token.NewFileSet()
|
||||
var err error
|
||||
if h.ast, err = parser.ParseFile(h.fset, "", prev, parser.ParseComments); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &h, nil
|
||||
}
|
||||
|
||||
// methodMap stores all defined service methods by name and is updated to
|
||||
// remove service methods already in the handler file.
|
||||
type methodMap map[string]*svcdef.ServiceMethod
|
||||
|
||||
func newMethodMap(meths []*svcdef.ServiceMethod) methodMap {
|
||||
mMap := make(methodMap, len(meths))
|
||||
for _, m := range meths {
|
||||
mMap[m.Name] = m
|
||||
}
|
||||
return mMap
|
||||
}
|
||||
|
||||
type handler struct {
|
||||
fset *token.FileSet
|
||||
service *svcdef.Service
|
||||
mMap methodMap
|
||||
ast *ast.File
|
||||
pkgName string
|
||||
}
|
||||
|
||||
type handlerExecutor struct {
|
||||
PackageName string
|
||||
Methods []*svcdef.ServiceMethod
|
||||
}
|
||||
|
||||
// Render returns a go code server handler that has functions for all
|
||||
// ServiceMethods in the service definition.
|
||||
func (h *handler) Render(f string, te *gengokit.TemplateExecutor) (io.Reader, error) {
|
||||
if f != serverTemplPath {
|
||||
return nil, errors.Errorf("cannot render unknown file: %q", f)
|
||||
}
|
||||
if h.ast == nil {
|
||||
return applyServerTempl(te)
|
||||
}
|
||||
|
||||
// Remove exported methods not defined in service definition
|
||||
// and remove methods defined in the previous file from methodMap
|
||||
log.WithField("Service Methods", len(h.mMap)).Debug("Before prune")
|
||||
h.ast.Decls = h.mMap.pruneDecls(h.ast.Decls, te.PackageName)
|
||||
log.WithField("Service Methods", len(h.mMap)).Debug("After prune")
|
||||
|
||||
// create a new executor, and add all methods not defined in the previous file
|
||||
ex := handlerExecutor{
|
||||
PackageName: te.PackageName,
|
||||
}
|
||||
|
||||
// If there are no methods to template then exit early
|
||||
if len(h.mMap) == 0 {
|
||||
return h.buffer()
|
||||
}
|
||||
|
||||
for k, v := range h.mMap {
|
||||
log.WithField("Method", k).
|
||||
Info("Generating handler from rpc definition")
|
||||
ex.Methods = append(ex.Methods, v)
|
||||
}
|
||||
|
||||
// get the code out of the ast
|
||||
code, err := h.buffer()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// render the server for all methods not already defined
|
||||
newCode, err := applyServerMethsTempl(ex)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if _, err = code.ReadFrom(newCode); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return code, nil
|
||||
}
|
||||
|
||||
func (h *handler) buffer() (*bytes.Buffer, error) {
|
||||
code := bytes.NewBuffer(nil)
|
||||
err := printer.Fprint(code, h.fset, h.ast)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return code, nil
|
||||
}
|
||||
|
||||
// pruneDecls constructs a new []ast.Decls with the exported funcs in decls
|
||||
// who's names are not keys in methodMap and/or does not have the function
|
||||
// receiver pkgName + "Service" ("Handler func") removed.
|
||||
//
|
||||
// When a "Handler func" is not removed from decls that funcs name is also
|
||||
// deleted from methodMap, resulting in a methodMap only containing keys and
|
||||
// values for functions defined in the service but not in the handler ast.
|
||||
//
|
||||
// In addition pruneDecls will update unremoved "Handler func"s input
|
||||
// paramaters and output results to by the types described in methodMap's
|
||||
// serviceMethod for that "Handler func".
|
||||
func (m methodMap) pruneDecls(decls []ast.Decl, pkgName string) []ast.Decl {
|
||||
var newDecls []ast.Decl
|
||||
for _, d := range decls {
|
||||
switch x := d.(type) {
|
||||
case *ast.FuncDecl:
|
||||
// Special case NewService
|
||||
if x.Name.Name == ignoredFunc {
|
||||
newDecls = append(newDecls, x)
|
||||
continue
|
||||
}
|
||||
if ok := isValidFunc(x, m, pkgName); ok == true {
|
||||
name := x.Name.Name
|
||||
updateParams(x, m[name])
|
||||
updateResults(x, m[name])
|
||||
newDecls = append(newDecls, x)
|
||||
delete(m, name)
|
||||
}
|
||||
default:
|
||||
newDecls = append(newDecls, d)
|
||||
}
|
||||
|
||||
}
|
||||
return newDecls
|
||||
}
|
||||
|
||||
// updateParams updates the second param of f to be `X`.(m.RequestType.Name).
|
||||
// func ProtoMethod(ctx context.Context, *pb.Old) ...-> func ProtoMethod(ctx context.Context, *pb.(m.RequestType.Name))...
|
||||
func updateParams(f *ast.FuncDecl, m *svcdef.ServiceMethod) {
|
||||
if f.Type.Params.NumFields() != 2 {
|
||||
log.WithField("Function", f.Name.Name).
|
||||
Warn("Function params signature should be func NAME(ctx context.Context, in *pb.TYPE), cannot fix")
|
||||
return
|
||||
}
|
||||
updatePBFieldType(f.Type.Params.List[1].Type, m.RequestType.Name)
|
||||
}
|
||||
|
||||
// updateResults updates the first result of f to be `X`.(m.ResponseType.Name).
|
||||
// func ProtoMethod(...) (*pb.Old, error) -> func ProtoMethod(...) (*pb.(m.ResponseType.Name), error)
|
||||
func updateResults(f *ast.FuncDecl, m *svcdef.ServiceMethod) {
|
||||
if f.Type.Results.NumFields() != 2 {
|
||||
log.WithField("Function", f.Name.Name).
|
||||
Warn("Function results signature should be (*pb.TYPE, error), cannot fix")
|
||||
return
|
||||
}
|
||||
updatePBFieldType(f.Type.Results.List[0].Type, m.ResponseType.Name)
|
||||
}
|
||||
|
||||
// updatePBFieldType updates t if in the form X.Sel/*X.Sel to X.newType/*X.newType.
|
||||
func updatePBFieldType(t ast.Expr, newType string) {
|
||||
// *pb.TYPE -> pb.TYPE
|
||||
if ptr, _ := t.(*ast.StarExpr); ptr != nil {
|
||||
t = ptr.X
|
||||
}
|
||||
// pb.TYPE -> TYPE
|
||||
if sel, _ := t.(*ast.SelectorExpr); sel != nil {
|
||||
//pb.SOMETYPE -> pb.newType
|
||||
sel.Sel.Name = newType
|
||||
}
|
||||
}
|
||||
|
||||
// isVaidFunc returns fase if f is exported and does no exist in m with
|
||||
// reciever pkgName + "Service".
|
||||
func isValidFunc(f *ast.FuncDecl, m methodMap, pkgName string) bool {
|
||||
name := f.Name.String()
|
||||
if !ast.IsExported(name) {
|
||||
log.WithField("Func", name).
|
||||
Debug("Unexported function; ignoring")
|
||||
return true
|
||||
}
|
||||
|
||||
v := m[name]
|
||||
|
||||
if v == nil {
|
||||
log.WithField("Method", name).
|
||||
Info("Method does not exist in service definition as an rpc; removing")
|
||||
return false
|
||||
}
|
||||
|
||||
rName := recvTypeToString(f.Recv)
|
||||
if rName != pkgName+"Service" {
|
||||
log.WithField("Func", name).WithField("Receiver", rName).
|
||||
Info("Func is exported with improper receiver; removing")
|
||||
return false
|
||||
}
|
||||
|
||||
log.WithField("Func", name).
|
||||
Debug("Method already exists in service definition; ignoring")
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
// recvTypeToString accepts an *ast.FuncDecl.Recv recv, and returns the
|
||||
// string of the recv type.
|
||||
// func (s Foo) Test() {} -> "Foo"
|
||||
func recvTypeToString(recv *ast.FieldList) string {
|
||||
if recv == nil ||
|
||||
recv.List[0].Type == nil {
|
||||
log.Debug("Function has no reciever")
|
||||
return ""
|
||||
}
|
||||
|
||||
return exprString(recv.List[0].Type)
|
||||
}
|
||||
|
||||
// exprString returns the string representation of
|
||||
// ast.Expr for function receivers, parameters, and results.
|
||||
func exprString(e ast.Expr) string {
|
||||
var prefix string
|
||||
// *Foo -> Foo
|
||||
if ptr, _ := e.(*ast.StarExpr); ptr != nil {
|
||||
prefix = "*"
|
||||
e = ptr.X
|
||||
}
|
||||
// *foo.Foo or foo.Foo
|
||||
if sel, _ := e.(*ast.SelectorExpr); sel != nil {
|
||||
// *foo.Foo -> foo.Foo
|
||||
if ptr, _ := e.(*ast.StarExpr); ptr != nil {
|
||||
prefix = "*"
|
||||
e = ptr.X
|
||||
}
|
||||
// foo.Foo
|
||||
if x, _ := sel.X.(*ast.Ident); x != nil {
|
||||
return prefix + x.Name + "." + sel.Sel.Name
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
// Foo
|
||||
if base, _ := e.(*ast.Ident); base != nil {
|
||||
return prefix + base.Name
|
||||
}
|
||||
|
||||
return ""
|
||||
}
|
||||
|
||||
func applyServerTempl(exec *gengokit.TemplateExecutor) (io.Reader, error) {
|
||||
log.Debug("Rendering handler for the first time")
|
||||
return applyTemplate(serverTempl, "ServerTempl", exec)
|
||||
}
|
||||
|
||||
func applyServerMethsTempl(exec handlerExecutor) (io.Reader, error) {
|
||||
return applyTemplate(serverMethsTempl, "ServerMethsTempl", exec)
|
||||
}
|
||||
|
||||
func applyTemplate(templ string, templName string, exec interface{}) (io.Reader, error) {
|
||||
funcMap := template.FuncMap{
|
||||
"ToLower": strings.ToLower,
|
||||
"GoName": generatego.CamelCase,
|
||||
}
|
||||
codeTemplate, err := template.New(templName).Funcs(funcMap).Parse(templ)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "cannot create template")
|
||||
}
|
||||
|
||||
outputBuffer := bytes.NewBuffer(nil)
|
||||
err = codeTemplate.Execute(outputBuffer, exec)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "template error")
|
||||
}
|
||||
|
||||
return outputBuffer, nil
|
||||
}
|
|
@ -0,0 +1,398 @@
|
|||
package handler
|
||||
|
||||
import (
|
||||
log "github.com/Sirupsen/logrus"
|
||||
"go/ast"
|
||||
"go/parser"
|
||||
"go/token"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/TuneLab/go-truss/gengokit"
|
||||
thelper "github.com/TuneLab/go-truss/gengokit/gentesthelper"
|
||||
"github.com/TuneLab/go-truss/svcdef"
|
||||
)
|
||||
|
||||
var gopath []string
|
||||
|
||||
func init() {
|
||||
gopath = filepath.SplitList(os.Getenv("GOPATH"))
|
||||
}
|
||||
|
||||
func init() {
|
||||
_ = thelper.DiffStrings
|
||||
log.SetLevel(log.DebugLevel)
|
||||
}
|
||||
|
||||
func TestServerMethsTempl(t *testing.T) {
|
||||
const def = `
|
||||
syntax = "proto3";
|
||||
|
||||
// General package
|
||||
package general;
|
||||
|
||||
import "google.golang.org/genproto/googleapis/api/serviceconfig/annotations.proto";
|
||||
|
||||
// RequestMessage is so foo
|
||||
message RequestMessage {
|
||||
string input = 1;
|
||||
}
|
||||
|
||||
// ResponseMessage is so bar
|
||||
message ResponseMessage {
|
||||
string output = 1;
|
||||
}
|
||||
|
||||
// ProtoService is a service
|
||||
service ProtoService {
|
||||
// ProtoMethod is simple. Like a gopher.
|
||||
rpc ProtoMethod (RequestMessage) returns (ResponseMessage) {
|
||||
// No {} in path and no body, everything is in the query
|
||||
option (google.api.http) = {
|
||||
get: "/route"
|
||||
};
|
||||
}
|
||||
}
|
||||
`
|
||||
sd, err := svcdef.NewFromString(def, gopath)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
var he handlerExecutor
|
||||
he.Methods = sd.Service.Methods
|
||||
he.PackageName = sd.PkgName
|
||||
|
||||
gen, err := applyServerMethsTempl(he)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
genBytes, err := ioutil.ReadAll(gen)
|
||||
const expected = `
|
||||
// ProtoMethod implements Service.
|
||||
func (s generalService) ProtoMethod(ctx context.Context, in *pb.RequestMessage) (*pb.ResponseMessage, error){
|
||||
var resp pb.ResponseMessage
|
||||
resp = pb.ResponseMessage{
|
||||
// Output:
|
||||
}
|
||||
return &resp, nil
|
||||
}
|
||||
`
|
||||
a, b, di := thelper.DiffGoCode(string(genBytes), expected)
|
||||
if strings.Compare(a, b) != 0 {
|
||||
t.Fatalf("Server method template output different than expected\n %s", di)
|
||||
}
|
||||
}
|
||||
|
||||
func TestApplyServerTempl(t *testing.T) {
|
||||
const def = `
|
||||
syntax = "proto3";
|
||||
|
||||
// General package
|
||||
package general;
|
||||
|
||||
import "google.golang.org/genproto/googleapis/api/serviceconfig/annotations.proto";
|
||||
|
||||
// RequestMessage is so foo
|
||||
message RequestMessage {
|
||||
string input = 1;
|
||||
}
|
||||
|
||||
// ResponseMessage is so bar
|
||||
message ResponseMessage {
|
||||
string output = 1;
|
||||
}
|
||||
|
||||
// ProtoService is a service
|
||||
service ProtoService {
|
||||
// ProtoMethod is simple. Like a gopher.
|
||||
rpc ProtoMethod (RequestMessage) returns (ResponseMessage) {
|
||||
// No {} in path and no body, everything is in the query
|
||||
option (google.api.http) = {
|
||||
get: "/route"
|
||||
};
|
||||
}
|
||||
}
|
||||
`
|
||||
conf := gengokit.Config{
|
||||
GoPackage: "github.com/TuneLab/go-truss/gengokit/general-service",
|
||||
PBPackage: "github.com/TuneLab/go-truss/gengokit/general-service",
|
||||
}
|
||||
sd, err := svcdef.NewFromString(def, gopath)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
te, err := gengokit.NewTemplateExecutor(sd, conf)
|
||||
|
||||
gen, err := applyServerTempl(te)
|
||||
genBytes, err := ioutil.ReadAll(gen)
|
||||
expected := `
|
||||
package handler
|
||||
|
||||
import (
|
||||
"golang.org/x/net/context"
|
||||
|
||||
pb "github.com/TuneLab/go-truss/gengokit/general-service"
|
||||
)
|
||||
|
||||
// NewService returns a naïve, stateless implementation of Service.
|
||||
func NewService() pb.ProtoServiceServer {
|
||||
return generalService{}
|
||||
}
|
||||
|
||||
type generalService struct{}
|
||||
|
||||
// ProtoMethod implements Service.
|
||||
func (s generalService) ProtoMethod(ctx context.Context, in *pb.RequestMessage) (*pb.ResponseMessage, error) {
|
||||
var resp pb.ResponseMessage
|
||||
resp = pb.ResponseMessage{
|
||||
// Output:
|
||||
}
|
||||
return &resp, nil
|
||||
}
|
||||
`
|
||||
a, b, di := thelper.DiffGoCode(string(genBytes), expected)
|
||||
if strings.Compare(a, b) != 0 {
|
||||
t.Fatalf("Server template output different than expected\n %s", di)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRecvTypeToString(t *testing.T) {
|
||||
values := []string{
|
||||
`package p; func NoRecv() {}`, "",
|
||||
`package p; func (s Foo) RecvFoo() {}`, "Foo",
|
||||
`package p; func (s *Foo) RecvStarFoo() {}`, "*Foo",
|
||||
`package p; func (s foo.Foo) RecvFooDotFoo() {}`, "foo.Foo",
|
||||
`package p; func (s *foo.Foo) RecvStarFooDotFoo() {}`, "*foo.Foo",
|
||||
}
|
||||
|
||||
for i := 0; i < len(values); i += 2 {
|
||||
fnc := parseFuncFromString(values[i], t)
|
||||
got := recvTypeToString(fnc.Recv)
|
||||
want := values[i+1]
|
||||
if got != want {
|
||||
t.Errorf("Func Recv got: \"%s\", want: \"%s\": for func: %s", got, want, values[i])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestIsValidFunc(t *testing.T) {
|
||||
const def = `
|
||||
syntax = "proto3";
|
||||
|
||||
// General package
|
||||
package general;
|
||||
|
||||
import "google.golang.org/genproto/googleapis/api/serviceconfig/annotations.proto";
|
||||
|
||||
// RequestMessage is so foo
|
||||
message RequestMessage {
|
||||
string input = 1;
|
||||
}
|
||||
|
||||
// ResponseMessage is so bar
|
||||
message ResponseMessage {
|
||||
string output = 1;
|
||||
}
|
||||
|
||||
// ProtoService is a service
|
||||
service ProtoService {
|
||||
// ProtoMethod is simple. Like a gopher.
|
||||
rpc ProtoMethod (RequestMessage) returns (ResponseMessage) {
|
||||
// No {} in path and no body, everything is in the query
|
||||
option (google.api.http) = {
|
||||
get: "/route"
|
||||
};
|
||||
}
|
||||
}
|
||||
`
|
||||
sd, err := svcdef.NewFromString(def, gopath)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
m := newMethodMap(sd.Service.Methods)
|
||||
const validUnexported = `package p;
|
||||
func init() {}`
|
||||
|
||||
const valid = `package p;
|
||||
func (s generalService) ProtoMethod(context.Context, pb.RequestMessage) (pb.ResponseMessage, error) {}`
|
||||
|
||||
const invalidRecv = `package p;
|
||||
func (s fooService) ProtoMethod(context.Context, pb.RequestMessage) (pb.ResponseMessage, error) {}`
|
||||
|
||||
const invalidFuncName = `package p;
|
||||
func (generalService) FOOBAR(context.Context, pb.RequestMessage) (pb.ResponseMessage, error) {}`
|
||||
|
||||
var in string
|
||||
in = validUnexported
|
||||
if ok := isValidFunc(parseFuncFromString(in, t), m, sd.PkgName); !ok {
|
||||
t.Errorf("Unexported Func considered invalid: %q", in)
|
||||
}
|
||||
in = valid
|
||||
if ok := isValidFunc(parseFuncFromString(in, t), m, sd.PkgName); !ok {
|
||||
t.Errorf("Func in service definition with proper recv considered invalid: %q", in)
|
||||
}
|
||||
in = invalidRecv
|
||||
if ok := isValidFunc(parseFuncFromString(in, t), m, sd.PkgName); ok {
|
||||
t.Errorf("Func with invalid recv considered valid: %q", in)
|
||||
}
|
||||
in = invalidFuncName
|
||||
if ok := isValidFunc(parseFuncFromString(in, t), m, sd.PkgName); ok {
|
||||
t.Errorf("Func with invalid name considered valid: %q", in)
|
||||
}
|
||||
}
|
||||
|
||||
func TestPruneDecls(t *testing.T) {
|
||||
const def = `
|
||||
syntax = "proto3";
|
||||
|
||||
// General package
|
||||
package general;
|
||||
|
||||
import "google.golang.org/genproto/googleapis/api/serviceconfig/annotations.proto";
|
||||
|
||||
// RequestMessage is so foo
|
||||
message RequestMessage {
|
||||
string input = 1;
|
||||
}
|
||||
|
||||
// ResponseMessage is so bar
|
||||
message ResponseMessage {
|
||||
string output = 1;
|
||||
}
|
||||
|
||||
// ProtoService is a service
|
||||
service ProtoService {
|
||||
// ProtoMethod is simple. Like a gopher.
|
||||
rpc ProtoMethod (RequestMessage) returns (ResponseMessage) {
|
||||
// No {} in path and no body, everything is in the query
|
||||
option (google.api.http) = {
|
||||
get: "/route"
|
||||
};
|
||||
}
|
||||
// ProtoMethodAgain is simple. Like a gopher again.
|
||||
rpc ProtoMethodAgain (RequestMessage) returns (ResponseMessage) {
|
||||
// No {} in path and no body, everything is in the query
|
||||
option (google.api.http) = {
|
||||
get: "/route2"
|
||||
};
|
||||
}
|
||||
// ProtoMethodAgainAgain is simple. Like a gopher again again.
|
||||
rpc ProtoMethodAgainAgain (RequestMessage) returns (ResponseMessage) {
|
||||
// No {} in path and no body, everything is in the query
|
||||
option (google.api.http) = {
|
||||
get: "/route3"
|
||||
};
|
||||
}
|
||||
}
|
||||
`
|
||||
sd, err := svcdef.NewFromString(def, gopath)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
m := newMethodMap(sd.Service.Methods)
|
||||
|
||||
prev := `
|
||||
package handler
|
||||
|
||||
import (
|
||||
"golang.org/x/net/context"
|
||||
|
||||
pb "github.com/TuneLab/go-truss/gengokit/general-service"
|
||||
)
|
||||
|
||||
// NewService returns a naïve, stateless implementation of Service.
|
||||
func NewService() pb.ProtoServiceServer {
|
||||
return generalService{}
|
||||
}
|
||||
|
||||
type generalService struct{}
|
||||
|
||||
func init() {
|
||||
//FOOING
|
||||
}
|
||||
|
||||
// ProtoMethod implements Service.
|
||||
func (s generalService) ProtoMethod(ctx context.Context, in *pb.RequestMessage) (*pb.ResponseMessage, error) {
|
||||
var resp pb.ResponseMessage
|
||||
resp = pb.ResponseMessage{
|
||||
// Output:
|
||||
}
|
||||
return &resp, nil
|
||||
}
|
||||
|
||||
// FOOBAR implements Service.
|
||||
func (s generalService) FOOBAR(ctx context.Context, in *pb.RequestMessage) (*pb.ResponseMessage, error) {
|
||||
var resp pb.ResponseMessage
|
||||
resp = pb.ResponseMessage{
|
||||
// Output:
|
||||
}
|
||||
return &resp, nil
|
||||
}
|
||||
`
|
||||
f := parseASTFromString(prev, t)
|
||||
lenDeclsBefore := len(f.Decls)
|
||||
lenMMapBefore := len(m)
|
||||
|
||||
newDecls := m.pruneDecls(f.Decls, sd.PkgName)
|
||||
|
||||
lenDeclsAfter := len(newDecls)
|
||||
lenMMapAfter := len(m)
|
||||
|
||||
if lenDeclsBefore-1 != lenDeclsAfter {
|
||||
t.Fatalf("Prune did update Decls as expected; got: %d, want: %d", lenDeclsBefore-1, lenDeclsAfter)
|
||||
}
|
||||
|
||||
if lenMMapBefore-1 != lenMMapAfter {
|
||||
t.Fatalf("Prune did update mMap as expected; got: %d, want: %d", lenMMapBefore-1, lenMMapAfter)
|
||||
}
|
||||
}
|
||||
|
||||
func TestUpdatePBFieldType(t *testing.T) {
|
||||
values := []string{
|
||||
`*pb.Old`, "New", "*pb.New",
|
||||
`pb.Old`, "New", "pb.New",
|
||||
`Old`, "New", "Old",
|
||||
}
|
||||
for i := 0; i < len(values); i += 3 {
|
||||
exp, err := parser.ParseExpr(values[i])
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
updatePBFieldType(exp, values[i+1])
|
||||
got := exprString(exp)
|
||||
want := values[i+2]
|
||||
if got != want {
|
||||
t.Errorf("Func Recv got: \"%s\", want: \"%s\": for func: %s", got, want, values[i])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func parseASTFromString(s string, t *testing.T) *ast.File {
|
||||
fset := token.NewFileSet()
|
||||
f, err := parser.ParseFile(fset, "", s, 0)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
return f
|
||||
}
|
||||
|
||||
func parseFuncFromString(f string, t *testing.T) *ast.FuncDecl {
|
||||
file := parseASTFromString(f, t)
|
||||
var fnc *ast.FuncDecl
|
||||
for _, d := range file.Decls {
|
||||
if d, ok := d.(*ast.FuncDecl); ok {
|
||||
fnc = d
|
||||
break
|
||||
}
|
||||
}
|
||||
if fnc == nil {
|
||||
t.Fatalf("No function found in: %q", f)
|
||||
}
|
||||
return fnc
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
package handler
|
||||
|
||||
const serverMethsTempl = `
|
||||
{{ with $te := .}}
|
||||
{{range $i := .Methods}}
|
||||
// {{.Name}} implements Service.
|
||||
func (s {{$te.PackageName}}Service) {{.Name}}(ctx context.Context, in *pb.{{GoName .RequestType.Name}}) (*pb.{{GoName .ResponseType.Name}}, error){
|
||||
var resp pb.{{GoName .ResponseType.Name}}
|
||||
resp = pb.{{GoName .ResponseType.Name}}{
|
||||
{{range $j := $i.ResponseType.Message.Fields -}}
|
||||
// {{GoName $j.Name}}:
|
||||
{{end -}}
|
||||
}
|
||||
return &resp, nil
|
||||
}
|
||||
{{end}}
|
||||
{{- end}}
|
||||
`
|
||||
|
||||
const serverTempl = `
|
||||
package handler
|
||||
|
||||
import (
|
||||
"golang.org/x/net/context"
|
||||
|
||||
pb "{{.PBImportPath -}}"
|
||||
)
|
||||
|
||||
// NewService returns a naïve, stateless implementation of Service.
|
||||
func NewService() pb.{{GoName .Service.Name}}Server {
|
||||
return {{.PackageName}}Service{}
|
||||
}
|
||||
|
||||
type {{.PackageName}}Service struct{}
|
||||
|
||||
{{with $te := . }}
|
||||
{{range $i := $te.Service.Methods}}
|
||||
// {{$i.Name}} implements Service.
|
||||
func (s {{$te.PackageName}}Service) {{$i.Name}}(ctx context.Context, in *pb.{{GoName $i.RequestType.Name}}) (*pb.{{GoName $i.ResponseType.Name}}, error){
|
||||
var resp pb.{{GoName $i.ResponseType.Name}}
|
||||
resp = pb.{{GoName $i.ResponseType.Name}}{
|
||||
{{range $j := $i.ResponseType.Message.Fields -}}
|
||||
// {{GoName $j.Name}}:
|
||||
{{end -}}
|
||||
}
|
||||
return &resp, nil
|
||||
}
|
||||
{{end}}
|
||||
{{- end}}
|
||||
`
|
|
@ -12,9 +12,10 @@ import (
|
|||
"unicode"
|
||||
|
||||
log "github.com/Sirupsen/logrus"
|
||||
"github.com/TuneLab/go-truss/svcdef"
|
||||
gogen "github.com/golang/protobuf/protoc-gen-go/generator"
|
||||
"github.com/pkg/errors"
|
||||
|
||||
"github.com/TuneLab/go-truss/svcdef"
|
||||
)
|
||||
|
||||
// Helper is the base struct for the data structure containing all the
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
{{/* See go-truss/gengokit/httptransport/template.go for code */}}
|
||||
{{/* See go-truss/gengokit/httptransport/templates.go for code */}}
|
||||
{{call .HTTPHelper.ServerTemplate .}}
|
||||
|
|
|
@ -1,29 +1 @@
|
|||
package handler
|
||||
|
||||
import (
|
||||
"golang.org/x/net/context"
|
||||
|
||||
pb "{{.PBImportPath -}}"
|
||||
)
|
||||
|
||||
// NewService returns a naïve, stateless implementation of Service.
|
||||
func NewService() pb.{{GoName .Service.Name}}Server {
|
||||
return {{.PackageName}}Service{}
|
||||
}
|
||||
|
||||
type {{.PackageName}}Service struct{}
|
||||
|
||||
{{with $te := . }}
|
||||
{{range $i := $te.Service.Methods}}
|
||||
// {{$i.Name}} implements Service.
|
||||
func (s {{$te.PackageName}}Service) {{$i.Name}}(ctx context.Context, in *pb.{{GoName $i.RequestType.Name}}) (*pb.{{GoName $i.ResponseType.Name}}, error){
|
||||
var resp pb.{{GoName $i.ResponseType.Name}}
|
||||
resp = pb.{{GoName $i.ResponseType.Name}}{
|
||||
{{range $j := $i.ResponseType.Message.Fields -}}
|
||||
// {{GoName $j.Name}}:
|
||||
{{end -}}
|
||||
}
|
||||
return &resp, nil
|
||||
}
|
||||
{{end}}
|
||||
{{- end}}
|
||||
{{/* See go-truss/gengokit/handler/templates.go for code */}}
|
||||
|
|
|
@ -76,7 +76,7 @@ func (fi bindataFileInfo) Sys() interface{} {
|
|||
return nil
|
||||
}
|
||||
|
||||
var _nameServiceNameCliClientClient_mainGotemplate = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xac\x56\xef\x6f\x9b\x48\x10\xfd\x0c\x7f\xc5\x1c\x6a\x24\x5c\x39\xd0\x93\xee\xbe\x58\xca\x87\x34\xd7\x5e\x23\x5d\x2b\x2b\x89\xd4\x2f\x27\x9d\x08\xac\x61\xaf\xb0\x4b\x77\x17\x27\x15\xf2\xff\x7e\x6f\x16\x8c\xed\xc6\x96\xef\x57\xa4\x04\x58\x66\xde\xcc\xbe\x79\x6f\x49\x9b\xe5\x5f\xb2\x52\x50\x93\x49\x15\x86\xb2\x69\xb5\x71\x14\x87\x41\x24\x54\xae\x0b\xa9\xca\xf4\x4f\xab\x55\x84\x85\x55\x9d\x95\xfe\xda\x38\xbe\x68\xcb\x7f\xad\x33\xb9\x56\xeb\xf1\x16\xe1\x7e\xd5\xc9\x46\x44\x21\x6e\x4a\x5d\x67\xaa\x4c\xb4\x29\xd3\xe7\x54\x09\x97\x22\xd8\x89\x67\x0f\x50\x6a\x5d\xd6\x22\xd9\x0b\x29\x4d\x9b\x0f\x69\xd2\x55\xdd\x63\x92\xeb\x26\x6d\xbf\x94\xa9\x30\x46\x1b\xcb\x6f\xd2\x94\x1e\x2a\x69\xe9\x5e\x98\xb5\xcc\x45\x18\xe4\xb5\x14\xca\x7d\xc8\x54\x51\x0b\x43\x51\xdf\x27\xb7\x7e\x0b\xcb\xcc\x55\x74\xb9\xd9\x50\x5a\x0a\x25\x4c\xe6\x44\x91\x22\x36\xad\x86\x48\xee\x92\xab\x0d\xe9\xe7\xf3\x10\x34\x76\x17\x54\xce\xb5\xff\x24\x8d\xe3\x91\xd6\x3e\xfa\xf0\xe5\xdb\xc3\x84\x28\x9c\x85\xe1\x3a\x33\x4c\xf9\x1f\x74\x45\x23\x9f\xc9\x32\x33\x56\xdc\x2a\x37\xad\x32\xb5\xc9\x7d\x5b\xcb\x71\x89\xa7\x92\xdc\xe8\x06\xf3\x1b\x57\x06\x96\x92\xcf\x26\x6b\x57\xc3\x4a\xfb\x98\xdc\x89\x52\x5a\x27\x0c\x4a\x8f\x9c\x25\x9f\xb2\x46\x6c\x36\xfc\x24\x0c\x57\x0f\x57\x9d\xca\xfd\xfc\xe3\x19\xf5\x23\xc7\x82\xb2\xa2\xc0\x0e\xa8\x35\xc2\x76\x8d\xb0\xa4\x34\xd9\x01\x81\x0a\x69\x73\x8d\xec\x6f\x64\xbf\x01\xbc\x99\x13\x58\x25\xf1\xdc\x8a\xdc\x59\xea\x10\x66\xc9\x69\x8f\xd4\x1a\xbd\x96\x85\x20\x57\x71\x9a\x41\x00\x03\x03\xd3\x92\x5e\x21\x6d\x8b\x99\x0c\x73\x1d\xaa\xb5\x4e\x6a\x45\x78\x34\x62\x55\x23\x45\x14\x04\x71\x32\x1c\xc3\x70\x57\x8f\x52\x65\x28\xcf\x65\x79\x69\x5c\xe6\x99\x8c\x7a\xb6\x0b\xbf\x78\xe9\x4c\xa6\x2c\x13\x9e\x70\x59\x62\x0d\x5b\x8f\xc4\xa9\xe0\x5d\xea\xce\x6e\x53\x41\x3c\x88\xee\x72\x07\x1a\xe9\x51\x63\x40\xc3\x96\xa8\xd2\xd6\x2d\xbc\x31\xb6\x83\x80\x14\xc7\xa1\x79\x3d\x5c\x33\xf6\xf0\x73\xe5\x6b\x24\xf7\x3e\x30\x8e\xf8\xad\x2f\x1d\xcd\x29\xe2\xdf\x0f\x0f\x0f\xcb\x03\x0a\x8a\xc2\xae\xf3\x68\x06\x24\x16\xd8\x69\x24\x7e\x3b\x21\x2d\x7e\x7e\xf3\xd3\x1b\xbe\x29\xef\x96\x37\x14\x33\xe8\xec\x04\x6a\x23\x5c\xa5\x0b\xa2\xe3\xa8\xc3\x5b\x46\xea\x7b\x50\x85\x83\xe0\x95\x54\x85\x78\x9e\xe3\x4a\x8b\x2b\x9a\x54\xf3\xd1\x07\xda\xcd\xa6\xef\xe5\x6a\x0c\xe2\x07\x51\x5b\xc1\xd7\x07\xfd\x9b\x7e\x82\x05\x5f\xc9\x51\x60\x78\xa5\x8a\xe9\x12\xcd\x83\x7f\x57\x61\x3e\xe1\x9c\xaa\xc0\xbb\x9c\xed\x0d\x04\x52\xbf\xf1\x03\xbd\x36\x98\xd4\x75\x5d\xbf\xe7\xa1\x6f\x36\x1c\x15\xf8\xcd\x7b\x73\xc5\x2c\xfd\x29\x69\x2b\x6d\x58\xa6\xef\x7f\xd5\x5c\x80\x8e\x3b\x26\x08\x60\x34\x4f\xa5\x37\x9c\x47\x45\xbf\xaf\x27\x1d\xfc\x70\x85\x49\xb3\x91\xb6\xa0\x73\x8e\x04\xf1\xbb\x93\x23\xf9\x24\x9e\xe2\x29\x03\x00\x1b\x62\x1e\x89\x71\x26\x15\xec\x70\x20\x4c\x35\x80\x80\x2f\xaf\x83\x5f\x64\x56\xc7\x53\xe8\x7c\x58\xfc\x8c\x53\xf3\x56\x59\x91\x77\x06\xbb\xdb\x5b\x7c\xc0\x71\xac\x3b\x17\xf3\xb1\x8c\x4d\x01\xae\x98\xb1\x34\x50\x8e\x41\x51\x48\xc9\xda\x57\x0a\x70\xb8\x27\xef\x5b\x68\xc3\xad\x62\x8d\x03\xc7\x15\x88\x80\x3a\xde\xf1\x5e\xe9\xa9\x92\x35\xfb\x38\xab\x21\x1e\x8f\xcf\xa6\x51\xf0\x08\x0c\xbb\xa0\x8b\x75\xe4\xdb\x64\xec\x00\xd9\xef\x9e\xa5\x8b\x7f\xe4\x27\x90\x1f\x14\x62\x85\xe9\x71\x3c\xe6\xa3\xfd\x00\x5e\x50\xb4\x3b\x93\x3d\x45\x1c\xbc\x63\x87\x1b\x3c\xd5\x9f\x9f\xc5\x82\x0f\x29\x23\x1a\xed\xc4\x64\x06\x0b\x07\xcb\x95\x14\xc5\xef\xca\xdb\x61\xbf\xad\x4d\x78\x84\x82\x33\x15\x2e\xd6\x00\x9a\x76\x79\x88\x16\x06\xf6\x49\xba\xbc\xa2\xd7\xa3\xe9\xfa\xb0\xef\x09\x4b\x15\xbd\x42\x4b\x2c\x76\x96\xe1\xce\x07\xbc\x84\x37\x2f\x2d\xc0\x43\xcf\xb0\xe5\xe8\x88\xec\xa3\x05\xd3\xdb\xf7\x97\x03\xb2\xf7\x89\x47\xd9\x53\x3d\x03\xf1\xcd\x36\x8b\x3f\x35\x9c\xe5\xf5\xce\x1b\x1e\xb5\xeb\x81\x92\x8f\xf0\x43\x95\xed\x7c\x32\xa0\x7b\x73\xf1\x83\x11\x5f\x3b\x61\xdd\xa4\xc0\x83\x6f\x2e\xec\x32\x75\x16\xf7\xfd\xdf\x6f\x89\xfd\x9b\xdc\x64\x75\xcd\x8b\x93\x99\xbd\x74\x8e\xe8\xf2\x8c\x30\x73\xe0\xb0\x24\x4f\xb6\xf6\xfd\xe0\xbe\xd3\xa7\x1f\x1e\xd8\x99\xf6\xb8\xfd\x2c\xed\xef\x6e\xfc\xdf\x25\x79\x8b\x4f\x4c\x69\x74\xa7\x0a\x76\xd9\xc8\xce\x7f\x6c\xfc\x48\xbd\xf3\x2d\x8f\xe8\x4b\x06\xaf\x55\x1c\x0d\x6c\xd3\xdd\xd0\x11\xbe\x9a\x3c\x8d\x85\x97\xfd\x41\xe0\xff\x34\xa6\x83\xda\xc3\xe9\x88\xda\xf8\xda\x02\xf7\x64\xed\xf5\x2c\xdc\x53\xd7\x9e\xce\x70\x3c\x64\x5d\xed\x16\xe7\x2d\x28\xd5\x1a\x07\x50\x41\xa3\xc9\x2e\xbe\x7a\x96\x86\xa7\x97\xa6\xc4\x64\xff\x0a\x00\x00\xff\xff\x6c\xf0\x67\x0a\xe4\x0a\x00\x00")
|
||||
var _nameServiceNameCliClientClient_mainGotemplate = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xac\x56\x4d\x6f\xdb\x38\x10\x3d\x4b\xbf\x62\x2a\x24\x80\x5c\x38\x74\x17\xd8\xbd\x18\xf0\x21\xcd\xb6\xdb\x00\xdb\xc2\x48\x02\xf4\x52\x60\x41\x53\x23\x89\x1b\x8a\x54\x49\x5a\x49\x40\xe8\xbf\x2f\x86\x92\x65\xbb\x89\x91\xfd\x0a\x90\x48\x1a\xcd\xbc\xf9\x7a\x8f\x4a\xcb\xc5\x3d\xaf\x10\x1a\x2e\x75\x9a\xca\xa6\x35\xd6\x43\x9e\x26\x19\x6a\x61\x0a\xa9\xab\xc5\x9f\xce\xe8\x2c\x4d\xb2\x52\xf1\x2a\x5e\x1b\x4f\x17\xe3\xe8\xaf\xf3\x56\x18\xdd\x8d\xb7\x52\x57\xd1\xea\x65\x83\x59\x9a\x26\x59\x65\x14\xd7\x15\x33\xb6\x5a\x3c\x2e\x34\xfa\x85\x30\xda\xe3\x63\x04\xa8\x8c\xa9\x14\xb2\x03\x97\xca\xb6\x62\x08\x93\xbe\xde\x6e\x98\x30\xcd\xa2\xbd\xaf\x16\x68\xad\xb1\x8e\xde\x2c\x16\x70\x57\x4b\x07\xb7\x68\x3b\x29\x30\x4d\x84\x92\xa8\xfd\x27\xae\x0b\x85\x16\xb2\x10\xd8\x75\x6c\x61\xcd\x7d\x0d\x17\x7d\x0f\x8b\x0a\x35\x5a\xee\xb1\x58\x08\x25\x17\xf5\xe0\x49\x55\x52\xb6\x21\xfc\xf5\x38\xd4\x7e\xac\x2e\xa9\xbd\x6f\xff\x49\x18\xf9\x67\x69\xd2\x6e\xa2\xfb\xfa\xfd\x71\x40\x96\xce\xd2\xb4\xe3\x96\x46\xfe\x07\xac\x60\x9c\x27\x5b\x73\xeb\xf0\x5a\xfb\xc9\x4a\xa3\x65\xb7\xad\x92\xa3\x89\xb6\xc2\xae\x4c\xd3\x72\x31\x5a\x86\x29\xb1\xaf\x96\xb7\xe5\x60\x69\x37\xec\x06\x2b\xe9\x3c\xda\x10\xd8\x38\x33\xf6\x85\x37\xd8\xf7\xf4\x84\x96\xb2\xa7\xe5\x56\x8b\xb8\xff\x7c\x06\x61\x9c\x31\x02\x2f\x0a\xa1\x24\xb4\x16\xdd\xb6\x41\x07\xda\x80\x1b\x10\xa0\x90\x4e\x98\x0e\xed\x13\xb8\x27\xe7\xb1\x99\x03\xd7\x05\xe0\x63\x8b\xc2\x3b\xd8\x3a\xb4\x0e\xbc\x89\x48\xad\x35\x9d\x2c\x10\x7c\x4d\x61\x16\x85\x27\x60\x8b\xce\x81\x29\x81\xeb\x1d\x26\x1b\xf6\x3a\x64\x6b\xbd\x34\x1a\xa4\x03\x8b\xa5\x42\xe1\xb1\x00\xa9\x23\x1c\xc1\x50\x55\x1b\xa9\xb9\x7d\x8a\x69\xc9\x34\x9a\x69\x27\x23\x9f\xdd\x32\x1a\x2f\xbc\xe5\xda\xd1\xc0\x19\xa5\x05\xe2\xb0\x8b\x48\x14\xda\x71\x2b\xcd\xd6\xed\x42\x85\xd1\xce\xdb\xad\xf0\xc6\x3a\xd8\x18\x5f\x8f\x2d\x41\x6d\x9c\x5f\x46\x61\xec\x16\x91\xa6\xc9\xb8\xb4\xc8\x87\x4b\xc2\x1e\x7e\x56\x31\x07\xbb\x8d\x8e\x79\x46\x6f\x63\xea\x6c\x0e\x19\xfd\x7e\xba\xbb\x5b\x1f\x8d\xa0\x28\x5c\x27\xb2\x59\x9a\x44\x42\x9e\x46\xa2\xb7\x13\xd2\xf2\x97\x77\x3f\xbf\xa3\x9b\xea\x66\x7d\x05\x39\x81\xce\x4e\xa0\x36\xe8\x6b\x53\x00\xbc\x8c\x3a\xbc\x25\xa4\x10\x2c\xd7\x15\xc2\x99\xd4\x05\x3e\xce\xe1\x4c\xc2\x72\x05\x13\x6b\x3e\x47\x47\xd7\xf7\x21\xc8\x72\x74\xa2\x07\x54\x0e\xe9\x7a\x67\x7e\x37\x0f\x68\xe1\x4c\x8e\x04\x0b\x01\x75\x31\x5d\xb2\x79\xf2\xef\x32\xcc\x27\x9c\x53\x19\xa8\xcb\xd9\xc1\x42\x42\x60\x57\x71\xa1\x97\xb6\x72\xec\x52\xa9\x8f\xb4\xf4\xbe\x27\xaf\x24\x36\x1f\xc5\x95\x13\xf5\xa7\xa0\x1d\xb5\xdb\x0d\x0b\xe1\x37\x43\x09\xe0\x65\xc5\x24\x09\xda\x61\x45\x51\x70\x11\x55\x96\xf0\x76\xe2\xc1\x9b\x15\x64\x19\x09\x69\x07\x3a\x27\x4f\x58\xc1\xfe\xe4\x60\x5f\xf0\x21\x9f\x22\x66\x69\xd2\x03\xcd\x11\x08\x67\x62\xc1\x1e\x47\x18\xad\x07\x90\xe5\x0a\x22\x0f\x7e\x95\x5c\xe5\x93\xeb\x7c\x30\x7e\x95\xbe\xbe\xd6\x0e\xc5\xd6\x62\x3e\x3b\x30\xde\xc9\x06\xcd\xd6\xe7\x74\x2c\xb3\x5b\x14\x46\x17\x33\xa2\x86\x2c\x23\xe8\x9b\x15\x68\xa9\x62\xa6\xa4\x6c\x3c\xfb\xd8\x5a\xa9\x7d\x99\x1b\xc7\x6e\x7d\x81\xd6\xce\x21\xfb\x40\xbd\xc2\x43\x2d\x15\xe9\x98\x2b\xa9\xab\x88\x4f\xa2\xd1\x28\x48\xb0\x4b\x38\xef\xb2\x58\x26\x61\x27\xc6\xb1\x0f\x8f\xd2\xe7\x3f\xd1\x53\x9f\x26\x49\x81\x25\xda\xe8\xcf\xae\x94\x89\x0b\x78\x36\xa2\xfd\x99\x1c\x47\x44\xce\xfb\xe9\x50\x81\xa7\xea\x8b\xbb\x58\xd2\x21\x65\xb1\x31\x1e\x27\x31\xb8\x16\x85\x2c\x25\x16\xdf\x74\x94\xc3\x61\x59\x7d\xfa\xc2\x08\x5e\xc9\x70\xde\x7d\xd3\xfb\x2e\x8f\xd1\xd2\xc4\x3d\x48\x2f\x6a\x78\x3b\x8a\x2e\xa4\x21\xc0\x83\xf4\x35\x9c\x79\x8c\x64\x27\x1a\xee\x75\x40\xa6\x33\x8f\xcf\x25\x40\x4b\xe7\x0e\x49\x95\xcf\x68\x9f\x2d\x69\xbc\x21\x5c\x0c\xc8\x51\x27\x11\xe5\x80\xf5\x04\x44\x37\xbb\x28\xfa\xd4\x50\x54\xe4\x3b\x35\x3c\x72\x37\x02\xb1\xcf\xdc\xba\x9a\xef\x75\x32\xa0\x47\x71\xd1\x83\xc5\xef\x5b\x74\x7e\x62\xe0\xd1\x37\x97\x85\x30\x55\x96\x87\xf0\xf7\x4b\x22\xfd\xb2\x2b\xae\x14\x19\x27\x31\x47\xea\xbc\xc0\xcb\x57\x88\x29\xb8\x8a\x94\x3c\x59\xda\x8f\x8b\xfb\x81\x9f\x71\x79\x49\xd2\x4d\x3d\xee\x3e\x4b\x87\xdd\x8d\xff\xbb\xb0\xf7\x5c\xdc\x57\xd6\x6c\x75\x41\x2a\x1b\xa7\xf3\x1f\x0b\x7f\x21\xdf\xeb\x25\x8f\xe8\x6b\x02\x57\x3a\xcf\x86\x69\xc3\xcd\x50\x11\x16\x91\x20\xcb\x48\xfb\x23\xc7\xff\x69\x4d\x47\xb9\x87\xd3\x11\x6e\xd0\xb5\x46\x17\xa7\x73\x77\xb3\xf4\x80\x5d\x07\x3c\x2b\xb0\xe4\x5b\xe5\x97\xaf\x4b\x50\xea\x8e\x2b\x59\xc0\x28\xb2\xf3\xef\x71\x4a\xc3\xd3\x73\x51\xf6\x69\xfa\x57\x00\x00\x00\xff\xff\x6c\xf0\x67\x0a\xe4\x0a\x00\x00")
|
||||
|
||||
func nameServiceNameCliClientClient_mainGotemplateBytes() ([]byte, error) {
|
||||
return bindataRead(
|
||||
|
@ -91,12 +91,12 @@ func nameServiceNameCliClientClient_mainGotemplate() (*asset, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
info := bindataFileInfo{name: "NAME-service/NAME-cli-client/client_main.gotemplate", size: 2788, mode: os.FileMode(436), modTime: time.Unix(1478723139, 0)}
|
||||
info := bindataFileInfo{name: "NAME-service/NAME-cli-client/client_main.gotemplate", size: 2788, mode: os.FileMode(436), modTime: time.Unix(1479344147, 0)}
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
return a, nil
|
||||
}
|
||||
|
||||
var _nameServiceNameServerServer_mainGotemplate = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xac\x56\x4f\x6f\xdb\x36\x14\x3f\x4b\x9f\x82\x15\x3a\x40\x1a\x1c\xaa\xc3\xd6\x1d\x82\xe6\xd0\xa6\x59\x1a\x2c\x09\x8c\xd8\xc3\xce\xb2\x44\xd3\x44\x24\x52\x20\xa9\xd4\x86\xe0\xef\xbe\xf7\x48\xca\x96\x53\xdb\xd9\xa1\x45\x63\x51\x7c\x3f\xfe\xf8\xfe\x3f\xb5\x45\xf9\x5c\x70\x46\x9a\x42\xc8\x38\x16\x4d\xab\xb4\x25\x69\x1c\x25\xcb\xba\xe0\x09\x3e\x1b\x8b\x0f\xc9\x86\x47\xbe\xb2\xb6\x1d\xaf\xf3\xb6\xd5\x6a\x89\x3b\xca\xf8\xdf\xdc\x08\x2e\x8b\x1a\x5f\xcc\xc6\x94\x45\x0d\xcb\x38\xca\x73\xf2\x7b\x45\xa6\x85\xb6\x1b\x10\x70\x55\x17\x92\x53\xa5\x79\xbe\xce\x91\xaa\x54\xd2\xb2\xb5\xbb\x85\x2b\xc5\x6b\x46\x47\x10\xae\xdb\x32\x70\xdc\x2a\xf2\xb7\xb0\x88\x12\x76\xd5\x2d\x68\xa9\x9a\x9c\xab\x8b\x67\x61\x73\xfc\x63\xb2\x6a\x95\x90\x9e\xe7\x28\xa2\x56\x3c\x50\xcd\x57\xc2\x90\x19\xd3\x2f\xa2\x64\x71\xb4\x2a\x64\x55\x33\x4d\x92\xbe\xa7\x77\xce\x11\xd3\xc2\xae\xc8\xc5\x76\x4b\xf2\x20\x03\xcb\x00\xcd\x34\x90\x9b\x97\xf2\x28\x92\x33\xc9\x74\x61\x59\x05\x98\x76\xe1\x20\xd3\x2f\x87\x20\xb8\x3d\x8b\xe3\x65\x27\x4b\xe7\xf6\x34\x23\x7d\x1c\xbd\x14\x1a\xfd\x1e\x55\x6c\xd1\xf1\xcf\x55\xa5\x89\xfb\x77\x45\x30\x10\x74\x66\xb5\x90\x3c\x4d\x9c\x94\x16\x20\x4e\x26\x24\xb9\xfc\xf8\xe1\xcf\x0f\xb8\xf8\x8a\xdb\x04\x74\x24\x0d\x03\x64\x69\x48\x2d\x8c\x65\x92\x20\x92\x19\x93\x64\xc0\x8c\xb1\xda\x13\xbf\x66\x46\xe9\x98\xf8\xa3\x23\xfe\x36\x9f\x4f\x8f\x71\x61\x3c\x4e\x73\xa1\x74\xcc\xf5\x87\xe3\xe2\x4f\xd3\x6b\x92\x22\x63\x76\x84\x12\xfe\x3b\x0e\xc8\x0f\xc3\xd2\xcc\x07\xe8\x5e\x71\x0e\x8c\xa4\x52\xe8\x28\xea\xbd\x04\xf1\xe3\xcc\x3d\xe8\xbd\x5b\xc6\x11\xf8\x2f\x0a\xdb\x57\x4e\xf0\xc8\xbe\x83\x0c\x72\xd7\x23\x52\x65\x40\xb9\x4a\x75\x36\x3b\x82\xbc\xf6\x99\x97\xfa\xfd\x8c\xfe\x0b\x69\x93\x26\xd6\x80\xd2\x88\xf8\xca\x96\x45\x57\xdb\xb9\x68\x98\xb1\x45\xd3\xfe\x33\xbf\xfe\xff\x2c\x98\xfc\x4c\x1f\x32\x5d\xbb\x3d\xe0\xd8\xc6\x81\x05\x0d\x49\x93\xc6\x70\xf4\xd3\x8a\xd5\xb5\x42\x97\x54\x6c\xc9\x06\x73\x0f\x10\x50\x1f\xd5\x62\xc3\x92\xe0\xa5\x2f\x9d\x11\x12\xdc\x78\xe8\x26\xe3\xf3\x9a\xb4\x0b\xda\xf7\xb7\xea\xb1\x68\x18\xa1\x21\xd9\x29\xbe\x6d\xb7\x33\x97\xcc\xde\x7d\x03\xfc\x8a\x84\x5c\x47\x9b\x02\x3c\x45\x7b\xe1\x22\x08\xd7\x8e\xb6\x0e\xa1\x19\x27\xdd\x8a\x69\x86\x56\x39\xad\x6e\x42\x21\xee\xb5\xea\x7b\x0d\xf5\xcc\xc8\x7b\x41\x2e\xaf\xf6\xba\x3c\x30\xbb\x52\x95\xd9\x6e\xbd\xde\x7d\x3f\x57\xf7\xea\x3b\x58\xfe\x5e\x04\x3d\x77\x54\x43\x71\xd3\x61\xc7\xeb\x7e\xee\xc8\x15\x81\x4a\xa5\x0f\xc5\x33\xeb\xfb\x1f\xa4\x69\xb0\x26\xd8\x07\x19\xbd\xbb\x82\x58\x5d\x94\x60\xe0\x84\x08\x69\xac\xee\x1a\x26\x6d\x61\x85\x92\xce\xe2\xc1\xfa\xc1\x62\x50\x01\x0e\xa2\x09\xc3\x79\x83\x36\xe2\xd5\xc3\x5d\xa6\x7f\xcb\x03\xd8\x1b\x9c\x35\x3f\xe8\x79\x89\x45\x76\xc6\xca\xc9\x48\x81\xe0\xfe\x07\x56\x42\x20\x05\xe4\xdf\x3e\x00\x4c\xeb\x12\x2f\x6e\xc0\x1b\x29\x8a\x09\xec\x28\xcc\xc4\xd2\xae\x51\x10\x7a\x30\xfd\x02\x53\x81\x6b\xd5\xc9\x6a\xa8\xc4\x3b\x10\x68\xdd\xb5\x76\x97\x1e\x71\xc4\x15\xc1\x26\xe6\xfb\x57\xf4\x8a\x19\x2b\xce\x4d\x81\x09\xf9\x0d\xdd\xeb\x47\x02\x7d\x54\x56\x2c\x37\x69\x39\x21\x61\x32\xd0\xd9\xdd\xed\xdd\xe3\xfc\xe0\x7d\x7e\xf3\xf4\x80\x67\x9c\xbe\x9f\x2e\x08\xd4\x31\xbd\x41\x4d\x97\x69\xf2\x0b\x96\xe5\xa7\x8b\x12\xcb\x67\x50\xce\xb7\x3f\xdf\x53\x8e\x68\x16\x2a\xf5\xf2\xad\x82\x87\xd8\x18\xec\xd3\x58\x62\xae\xd1\xba\x02\x8b\x1a\x3c\xe9\xda\x63\xa8\x08\xf6\xd0\xad\x5d\x49\x34\xf4\x9b\x73\x46\x9a\xe4\x0e\xef\x27\x61\x0e\xe7\x1d\xdc\x0b\xf5\x5f\xa8\x89\x93\xd0\x3b\x59\xb1\x75\x76\xe6\x68\xd9\x54\x35\xd4\xf2\x69\x86\x6b\x0f\x38\xc7\x81\x3f\xa2\x3e\xc3\x31\xf5\x80\x73\x1c\x66\xd3\x2c\x54\x7d\x9a\x62\xe6\xe4\xe7\x18\xb0\x7c\xce\xe8\x30\x47\x71\xe6\xfc\x3b\x6e\x70\x61\x68\xfc\xba\x9b\x82\xe3\x34\x70\x54\xf7\x2e\xca\x9f\x65\xe5\x22\x91\xee\x91\x13\xd2\x8c\x73\xc2\x4d\xae\x5d\x48\x7f\x4a\x4e\x20\xa5\x9f\xa4\x43\x6d\x63\x5b\xc1\xdd\x60\x5f\x0a\x65\x34\xd9\x75\x10\x33\x09\xbd\x3b\x3b\x61\xe4\x30\x90\xdf\xb4\x71\x00\x82\x37\xc7\x26\xba\x81\xfa\x73\x4d\x44\x4a\x9f\xf5\xb5\x9c\x60\x77\xc0\xe3\xf0\x75\x16\x54\x02\x74\xd9\xa2\xea\xc3\xfc\x47\xd5\xc5\xd2\x01\xdf\x01\x50\xd4\xee\xe6\x9d\x35\xf0\xc4\x57\xcd\x6c\xa7\x25\xac\xb0\x37\x45\x46\xbf\x8c\xfd\x77\x0b\x57\xfa\x41\xf4\xca\x7d\xae\x6b\x20\xd2\x7d\x4e\x0c\xb5\xa7\x5d\xe5\xc1\x50\x7b\x62\x1c\x75\xd2\xf0\x81\x75\x6c\xaa\xa5\xe0\x7e\xb8\xe9\x64\x86\x8d\x2d\x18\xd4\x35\xd4\x3b\xbc\x96\x63\x37\x3f\x75\xf2\xdd\xe1\xa0\x66\x6b\x61\x5d\x17\xc2\x83\x59\xbc\x8d\xff\x0b\x00\x00\xff\xff\xf4\x3e\x62\x2e\x46\x0b\x00\x00")
|
||||
var _nameServiceNameServerServer_mainGotemplate = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xac\x56\xdf\x6f\xdb\x36\x10\x7e\x16\xff\x0a\x56\xe8\x00\x69\x50\xa8\x0e\x5b\xf7\x10\x34\x0f\xad\xdb\xa5\xc1\x92\xc0\x88\x3d\xec\x99\x96\xce\x34\x11\x89\x14\x48\xca\x75\x20\xf8\x7f\x1f\x8e\xa4\x1c\xb9\x75\x9c\x3d\xb4\x40\x2d\x89\xf7\xf1\xe3\x7d\xc7\xfb\x91\x8e\x57\x8f\x5c\x00\x6d\xb9\x54\x84\xc8\xb6\xd3\xc6\xd1\x8c\x24\xe9\xba\xe1\x22\xc5\x67\xeb\xf0\xa1\x60\x7c\x94\x1b\xe7\xba\xe9\x7b\xd9\x75\x46\xaf\x71\x45\xdb\xf0\x5b\x5a\x29\x14\x6f\xf0\xc3\x3e\xd9\x8a\x37\x4d\x4a\x48\x52\x96\xf4\xf7\x9a\xce\xb9\x71\x4f\x24\x49\x85\x6e\xb8\x12\x4c\x1b\x51\xee\x4a\xa4\xaa\xb4\x72\xb0\xf3\xa7\x08\xad\x45\x03\x6c\x02\x11\xa6\xab\x22\xc7\xb5\xa6\x7f\x4b\x87\x28\xe9\x36\xfd\x8a\x55\xba\x2d\x85\xbe\x78\x94\xae\xc4\xff\xa0\xea\x4e\x4b\x15\x78\x4e\x22\x1a\x2d\x22\xd5\x72\x23\x2d\x5d\x80\xd9\xca\x0a\x48\xb2\xe1\xaa\x6e\xc0\xd0\x74\x18\xd8\x8d\x0f\xc4\x9c\xbb\x0d\xbd\xd8\xef\x69\x19\x6d\xb6\xb4\x60\xb6\x60\x52\x92\xd8\x6d\x75\x12\x29\x40\x81\xe1\x0e\xea\x94\x24\xdd\xca\x43\xe6\x9f\x8e\x41\x29\x21\x39\x21\xeb\x5e\x55\x3e\xec\x59\x4e\x07\x92\x6c\xb9\xc1\xb8\x27\x35\xac\x7a\xf1\xb1\xae\x0d\xf5\xff\xae\x28\x5e\x04\x5b\x38\x23\x95\xc8\x52\x6f\x65\xbc\xae\x4d\x5a\xd0\xf4\xf2\xfd\xbb\x3f\xdf\xe1\xcb\x67\x5c\xa6\x5c\xd5\xb4\x05\x67\x64\x65\x69\x23\xad\x03\x45\x11\x09\xd6\xa6\x39\x49\x12\xbc\xab\x67\xe2\xef\x99\xd1\x3a\x25\x7e\xef\x89\xbf\x2e\x97\xf3\x53\x5c\x78\x1f\x2f\x73\xa1\x75\xca\xf5\x87\xe7\x12\x0f\xf3\x19\xcd\x90\x31\x3f\x41\x99\x93\xc4\x73\xcc\xb9\xb1\x90\xe5\xe1\x82\x6e\xb5\x10\x52\x09\x5a\x6b\x0c\x14\x0b\x51\x6a\xb4\x10\xe0\x1f\xec\xd6\xbf\x92\x64\x20\x49\x12\x97\xaf\xbc\xe1\x1e\xbe\xdd\x6a\xb1\x6e\x5d\x40\x64\xda\xb2\x85\xab\x75\xef\xf2\x13\xc8\x59\xc8\xbc\x2c\xac\xe7\xec\x5f\xe9\x36\x59\xea\x6c\x5a\x78\xc4\x67\x58\xf3\xbe\x71\x4b\xd9\x82\x75\xbc\xed\xfe\x59\xce\xfe\x3f\x0b\x26\x3f\x98\x63\xa6\x99\x5f\xcb\x49\xb2\x27\x91\x05\x85\x64\x69\x6b\x05\xc6\x69\x03\x4d\xa3\x31\x24\x35\xac\x61\x94\x7b\x84\x10\x5a\xd7\xab\x27\x48\x63\x94\x3e\xf5\x56\x2a\xb0\xf6\x38\x4c\x36\xe4\x35\xed\x56\x6c\x18\xae\xf5\x3d\x6f\x81\xb2\x98\xec\x0c\xbf\xf6\xfb\x85\x4f\xe6\x10\xbe\x11\x7e\x45\x63\xae\xa3\xa6\x08\xcf\x50\x6f\x59\xe2\x75\x1d\x68\x9b\x78\x35\xd3\xa4\xdb\x80\x01\x54\xe5\xbd\xfa\x12\x0b\xf1\xd9\xab\x61\x30\x5c\x09\xa0\x6f\x25\xbd\xbc\x7a\xf6\xe5\x0e\xdc\x46\xd7\x76\xbf\x0f\x7e\x0f\xc3\x52\xdf\xea\x6f\x60\xe8\x5b\x19\xfd\x3c\x50\x8d\xc5\xcd\xc6\x95\xe0\xfb\xb9\x2d\x57\xd4\x6e\x2b\x76\xc7\x1f\x61\x18\x7e\xb0\x66\x51\x4d\xd4\xf7\xb1\xae\x0f\x47\x50\x67\x78\x25\x95\x28\xa8\x54\xd6\x99\xbe\x05\xe5\xb8\x93\x5a\x79\xc5\xa3\xfa\x51\x71\x32\x0c\xa0\x6a\x94\x30\xee\xb7\xa8\x11\x8f\x1e\xcf\xb2\xc3\x6b\x11\xc0\xde\xe0\xd5\xfc\xe0\xe7\x25\x16\xd9\x19\x95\xc5\xc4\x81\x18\xfe\x3b\xa8\x36\x5c\xc9\x8a\x37\xcf\x17\x00\xc6\x54\x78\x70\xcb\x1f\x21\x43\x33\x05\x63\x34\x66\x62\xe5\x76\x68\x88\x3d\x98\x7d\xe2\xd5\xa3\x30\xba\x57\xf5\x58\x89\x37\xca\x81\x31\x7d\xe7\x0e\xe9\x41\x12\xa1\x29\x36\xb1\xd0\xbf\x92\xef\x98\xb1\xe2\xfc\x14\x28\xe8\x6f\x18\xde\x30\x12\xd8\xbd\x76\x72\xfd\x94\x55\x05\x8d\x93\x81\x2d\x6e\xae\x6f\xee\x97\x47\xdf\xcb\x2f\x0f\x77\xb8\xc7\xfb\xfb\xe1\x82\xae\x5b\xc7\xbe\xa0\xa7\xeb\x2c\xfd\x05\xcb\xf2\xc3\x45\x85\xe5\x33\x3a\x17\xda\x5f\xe8\x29\x27\x3c\x8b\x95\x7a\xf9\x5a\xc1\x1b\xae\x2c\xf6\x69\x2c\x31\xdf\x68\x7d\x81\x25\x2d\xee\xf4\xed\x31\x56\x04\xdc\xf5\x3b\x5f\x12\x2d\xfb\xea\x83\x91\xa5\xa5\xc7\x87\x49\x58\xa6\x45\x80\x07\xa3\xf9\x0b\x3d\xf1\x16\x76\xa3\x6a\xd8\xe5\x67\xb6\x56\x6d\xdd\x48\x05\x2f\x33\xcc\x02\xe0\x1c\x07\xfe\xc8\xe6\x0c\xc7\x3c\x00\xce\x71\xd8\xa7\x76\xa5\x9b\x97\x29\x16\xde\x7e\x8e\x01\xcb\xe7\x8c\x0f\x4b\x34\xe7\x3e\xbe\xd3\x06\x17\x87\xc6\xaf\x87\x29\x38\x4d\x03\x4f\x75\xeb\x6f\xf9\xa3\xaa\xfd\x4d\x64\xcf\xc8\x82\xb6\xd3\x9c\xf0\x93\xeb\x70\xa5\x3f\x25\x27\x90\x32\x4c\xd2\xb1\xb6\xb1\xad\xe0\x6a\xd4\x97\x55\x6e\x57\x1c\x3a\x88\x2d\x62\xef\xce\x5f\x10\x39\x0e\xe4\x57\x35\x8e\xc0\x82\x6e\xa6\x12\xfd\x40\xfd\xb9\x12\x91\x32\x64\x7d\xa3\x0a\xec\x0e\xb8\x5d\x81\x8b\x2e\x65\xa9\xab\x3a\x74\x7d\x9c\xff\xe8\xba\x5c\x7b\xe0\x9b\x2b\xaa\x64\xe3\x4f\x3e\xa8\x01\x63\xf0\xd3\x80\xeb\x8d\x22\x89\xef\x4d\x89\x35\xdb\x69\xfc\xae\x1f\xe6\xb3\x30\x88\xbe\x0b\x9f\xef\x1a\x88\xf4\x7f\x4e\x8c\xb5\x67\x7c\xe5\x75\x2b\xf6\x00\x02\x7d\x32\xc3\x70\x72\xaa\x65\xb6\xa0\xd6\x6c\x5f\xcc\xb0\xa9\x82\xd1\x5d\xcb\x42\xc0\x1b\x35\x0d\xf3\x43\xaf\xde\x1c\x0f\x6a\xd8\x49\xe7\xbb\x10\x6e\xcc\xc9\x9e\xfc\x17\x00\x00\xff\xff\xf4\x3e\x62\x2e\x46\x0b\x00\x00")
|
||||
|
||||
func nameServiceNameServerServer_mainGotemplateBytes() ([]byte, error) {
|
||||
return bindataRead(
|
||||
|
@ -111,12 +111,12 @@ func nameServiceNameServerServer_mainGotemplate() (*asset, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
info := bindataFileInfo{name: "NAME-service/NAME-server/server_main.gotemplate", size: 2886, mode: os.FileMode(436), modTime: time.Unix(1478128977, 0)}
|
||||
info := bindataFileInfo{name: "NAME-service/NAME-server/server_main.gotemplate", size: 2886, mode: os.FileMode(436), modTime: time.Unix(1478654064, 0)}
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
return a, nil
|
||||
}
|
||||
|
||||
var _nameServiceGeneratedCliHandlersClient_handlerGotemplate = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x8c\x52\x4d\x6f\xea\x30\x10\x3c\xc7\xbf\x62\x85\x10\x4a\x9e\xc0\xdc\x91\xde\xe1\xf1\xd4\x22\x0e\xad\x10\xed\x1f\x30\xc9\x02\x56\x13\x27\xb5\x9d\x7e\xc8\xf2\x7f\xef\xda\x98\x50\x7a\xa1\x17\xb0\x77\x66\xc7\xb3\xb3\xe9\x44\xf9\x22\x0e\x08\x65\x2d\x51\xd9\xa3\x50\x55\x8d\x9a\x31\xd9\x74\xad\xb6\x90\xb3\xac\xdb\xc1\xc8\xb9\x31\xdf\x2c\xd7\xb1\xb6\x11\xf6\x08\x33\xef\x47\xac\x60\xcc\x39\x78\x97\x74\x1f\x5b\x84\xc5\x5f\xe0\xde\xb3\xcc\x39\x2d\x14\x29\x8e\x65\x28\x11\xc2\x9f\x50\xbf\xc9\x12\xf9\x03\xda\x63\x5b\x99\x40\x9a\xcf\x81\x44\x25\x7f\x14\x0d\x7a\x0f\xf4\x5c\x8d\x0d\x19\x30\x70\x26\xb3\x6c\xdf\xab\xf2\x3b\x2b\x77\x2e\x3e\x26\x55\x85\x1f\x51\xf8\x7f\x34\xfd\x4f\x1f\x4c\xd4\x0e\x07\x18\xe8\xce\xad\xda\x70\x02\x7e\x4f\x42\x56\xb6\x2a\xe0\xa1\x8e\xaa\xf2\xbe\x80\xfc\x4f\xb7\xe3\x03\x8b\xfa\xb6\xf8\xda\xa3\xb1\xcf\x9f\x1d\x26\x8d\x29\xa0\xd6\xad\x2e\x1c\xcb\x32\x7d\x42\xc3\x50\x37\xfb\x02\xdf\xb9\x59\x0a\xa7\x21\x6f\xa1\xed\x57\xc6\x43\xb6\xd4\x7d\x89\xb1\x13\x5a\x34\x31\xca\xa0\xc3\x23\x37\x71\xe2\x1b\x72\x0f\xb4\x35\xc8\xe3\x8f\x6a\x6d\xea\xe0\x6b\xb3\x14\x06\x83\xa9\xe2\xaa\xbe\xc5\x0e\x85\xc5\xaa\xb8\x2e\xdf\xa9\xbe\x29\x92\x6c\x76\x99\xee\x04\xa6\x35\x2d\x60\xf2\x13\x59\xb5\x64\x88\x82\x1a\xec\x60\x6d\x10\x6e\xea\xdc\x96\xa1\x69\x86\x24\x2e\x97\x04\xc5\xb3\x8f\x4b\xb1\xbd\x56\x30\x49\xcb\x99\x82\x92\x35\xcb\xe2\x57\x78\xa2\x9d\xff\xbf\x02\x00\x00\xff\xff\x50\xcc\x31\x90\xe8\x02\x00\x00")
|
||||
var _nameServiceGeneratedCliHandlersClient_handlerGotemplate = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x8c\x52\x4d\x8f\xda\x30\x10\x3d\xdb\xbf\x62\x84\x22\x94\x54\x60\xee\x48\x3d\x40\xd5\x22\x0e\xad\x10\xed\x1f\x30\xc9\x90\x58\x4d\x1c\xaf\xe3\xec\x87\x46\xfe\xef\x2b\x1b\x43\x96\xbd\xb0\x97\x64\xf2\xde\x9b\xe7\xf1\x9b\x18\x59\xfe\x97\x35\x42\xd9\x2a\xd4\xae\x91\xba\x6a\xd1\x72\xae\x3a\xd3\x5b\x07\x39\x67\xe6\x04\x33\xa2\x4c\x1c\xb6\xfb\x88\x1d\xa4\x6b\x60\xe9\xfd\x8c\x17\x9c\x13\xc1\x8b\x72\x0d\x64\x0e\x61\xfd\x1d\x84\xf7\x9c\x11\x59\xa9\x6b\x84\x4c\x05\x28\x73\x28\xfe\xa2\x7d\x56\x25\x8a\xdf\xe8\x9a\xbe\x1a\x82\x68\xb5\x02\xa2\x4c\x89\x3f\xb2\x43\xef\x41\x75\xa6\xc5\x0e\xb5\x1b\xe0\x2a\xe6\xec\x3c\xea\xf2\xa3\x2a\x27\x8a\x87\x29\x5d\xe1\x6b\x34\xfe\x11\x87\xde\xd8\x7a\x88\xde\xa1\x80\x9b\x9c\x68\xd7\x87\x0a\xc4\xaf\x51\x97\x4e\xf5\x3a\xf0\x01\x47\x5d\x79\x5f\x40\xfe\xcd\x9c\xc4\x4d\x95\x29\x71\xc4\xa7\x11\x07\xf7\xef\xcd\x60\xf2\x58\x00\x5a\xdb\xdb\x82\x38\x63\xf6\xc2\x86\x4b\x3d\xec\x0b\x7a\xa2\x65\x0a\xa7\x43\xd7\x84\xb6\x2f\x0d\x1e\xb2\xe5\x8c\x4d\x31\x1a\x69\x65\x17\xa3\x0c\x3e\x22\x6a\x93\x26\x9e\xa1\xce\x20\x75\x05\x79\x7c\xe8\xde\xa5\x0e\xb1\x1f\xb6\x72\xc0\x30\x54\x71\x87\x1f\xd1\xa0\x74\x58\x15\xf7\xf0\x4f\x3d\x76\x45\xb2\x65\xd3\xed\x2e\x64\x5a\xd3\x1a\xe6\x9f\x99\x5d\xbf\xb1\xb5\xf7\x8b\xdb\x38\xd8\x0e\x08\x0f\x7d\x1e\xdb\xe8\x6a\x4a\x62\xfa\x48\x54\xac\x7d\x5c\x8a\x1b\xad\x86\x79\x5a\xce\x02\xb4\x6a\x39\x8b\x7f\xe1\x45\x76\x7d\xbf\x07\x00\x00\xff\xff\x50\xcc\x31\x90\xe8\x02\x00\x00")
|
||||
|
||||
func nameServiceGeneratedCliHandlersClient_handlerGotemplateBytes() ([]byte, error) {
|
||||
return bindataRead(
|
||||
|
@ -131,12 +131,12 @@ func nameServiceGeneratedCliHandlersClient_handlerGotemplate() (*asset, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
info := bindataFileInfo{name: "NAME-service/generated/cli/handlers/client_handler.gotemplate", size: 744, mode: os.FileMode(436), modTime: time.Unix(1478723139, 0)}
|
||||
info := bindataFileInfo{name: "NAME-service/generated/cli/handlers/client_handler.gotemplate", size: 744, mode: os.FileMode(436), modTime: time.Unix(1479344147, 0)}
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
return a, nil
|
||||
}
|
||||
|
||||
var _nameServiceGeneratedClientGrpcClientGotemplate = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x7c\x55\xdf\x6f\xdb\x36\x10\x7e\x16\xff\x8a\x9b\x51\x0c\x52\xa0\x50\xef\x1d\xfc\x52\x77\x2b\x3a\xac\x9d\xd1\x06\xdb\xc3\x30\x0c\x34\x45\xcb\x84\x6d\x52\xa3\x68\x27\x81\xa0\xff\x7d\x77\xfc\x91\xc8\x5e\x92\xa2\x41\xc4\xe3\x77\x77\x1f\xbf\xfb\x91\xa6\x81\xb5\x90\x7b\xd1\x29\xe8\x5c\x2f\xa1\x77\xf6\xac\x5b\x35\x80\x80\xee\xdb\x7a\x05\xf2\xa0\x95\xf1\xb0\xb5\x0e\xfc\x4e\xc1\x38\xf2\xef\xca\x9d\xb5\x54\xfc\xab\x38\xaa\x69\x82\x21\x1d\x59\x3f\x0b\xc3\x98\x3e\xf6\xd6\x79\x28\x59\xb1\xe8\xec\x41\x98\x8e\x5b\xd7\x35\x0f\x8d\x51\xbe\x91\xd6\x78\xf5\xe0\x17\xe1\xce\x76\x07\xc5\x67\x10\x72\x7f\xfd\xa6\x39\x2a\x2f\x5a\xe1\x45\x80\x68\xbf\x3b\x6d\xb8\xb4\xc7\xa6\xdf\x77\x8d\x72\xce\xba\x61\xc1\x2e\x6f\x3a\x7b\xbb\xd7\xbe\xa1\x1f\x65\xda\xde\x6a\x43\x89\x29\x96\x77\xc2\x0c\x81\xe5\x2b\xf8\x27\x40\x22\xc5\x0a\x54\xeb\x6e\xa7\x07\x48\x1a\xb0\x62\x38\x4b\x58\xa0\x28\x9f\xc3\x73\xd7\xc2\xef\xe0\x16\x45\x69\x3a\x65\x94\x13\x5e\xb5\x98\xab\xdf\x04\xc8\xfa\xc3\x25\x68\xc1\x2a\xc6\x30\xe0\x57\x75\x0f\x4e\xf9\x93\x33\x28\xba\xc9\x7a\xc2\x06\xe5\x54\x2d\x6c\x1e\xaf\x2a\x81\xe2\x19\x25\xbd\xb6\x86\xc3\x67\x0f\x48\x06\xeb\xc2\xb6\x27\x23\x29\x52\x49\xd7\x70\x43\x7c\xf9\x2a\x38\xac\xd0\x50\x83\xed\xc9\x63\x00\xce\x93\xf9\xf7\x60\xa8\xa0\xec\x37\x7c\x1c\x3f\x59\xaa\x26\x5c\xd5\x96\x4e\xca\xd5\x10\x84\xad\x60\x64\xc5\x59\x38\x90\x32\x51\xc1\xc8\x5b\xdd\xa1\x2a\xd4\x1c\xff\xd4\xb0\x85\xf7\x4b\x40\xc9\xb0\x07\x72\x3a\x74\x29\xd0\x9b\x2e\xb6\xe5\x8f\x52\x56\x78\xd6\x5b\x0a\x08\x3f\x2c\xc1\xe8\x43\x40\x14\xf1\xf9\x74\x4e\xc9\x06\xfe\xa7\x13\x7d\x89\xdf\x35\x2c\xa4\x30\xc6\x7a\x10\x7d\x7f\x78\x4c\x91\x17\x14\x68\x62\xf8\x9f\x15\x72\xf6\x9e\x81\x32\xfd\xf5\xf7\x45\x75\x2f\x1e\x4c\xe9\x5e\xba\xfd\xa0\xf0\x11\xaa\x24\x32\xa9\x3b\xff\x10\x87\x93\x1a\xee\xec\x27\xd4\xfe\x4b\x6a\xba\x52\x4a\xbe\x53\xa2\x55\x6e\xa8\xaa\x9a\xd2\x17\xe3\x78\x0b\xf7\xd8\x3d\xf0\xce\x2b\x4a\xce\x27\x34\xce\xac\xd8\x98\x41\x5a\xbc\x42\x04\x4f\xb3\x16\xf5\xa5\x6c\x84\x8c\x9a\xbd\xd3\x19\x94\xab\x80\x69\x77\xb6\x1d\x22\x30\x68\x3f\x8e\x77\xf6\x37\x7b\xaf\x1c\xa2\x53\x91\x7e\x4e\x4d\x0d\xb9\xbb\x79\xb6\x04\xaf\xa0\x2f\xa5\x79\xdd\x71\x09\x97\x8a\x60\x1b\x45\x51\xca\xe8\x4b\x8a\x98\x3a\x7d\x63\x27\xe7\x37\x4d\x13\x76\xce\x9c\x6f\x34\x2e\xe6\x50\x7d\x6d\xc4\x81\x41\x82\xd2\xb6\x8a\x84\x9d\x21\xbe\xa9\x7f\x51\x6f\x3f\xc7\x7d\x54\x2f\xe2\x90\xa5\x19\x54\x06\xce\xfb\x17\x41\xf9\xfa\xee\xb1\xcf\x84\xc6\x29\x63\x2f\x5a\x05\x47\x21\xd9\xab\x27\xc9\xca\x2a\x58\x52\x65\x50\xd1\x54\xcd\xf4\x95\x3f\x58\xee\xd8\xf8\x9a\xe8\x3b\x8c\x04\x98\xd7\xf2\xba\x90\x34\xf5\x21\xdc\xff\x6a\xf0\x1e\xf0\xdf\x1b\x35\xaa\x9f\x73\x17\x53\x4d\x83\xc2\x90\x85\xc7\x37\x5e\xcc\x22\x0c\xde\x9d\xa4\xa7\xa1\x4a\x6d\x8a\xc3\x80\x36\x6d\x3a\xc2\xe3\xb2\x99\xcf\x02\xed\x0e\x01\xb4\x39\xc2\xc9\xef\x84\x87\xa3\x6d\xf5\x56\xab\xb0\x54\x66\x1b\x87\xe6\x3c\x64\xbb\xf0\x27\xd7\xf2\x66\x4e\xa0\x8a\xe3\xcb\xe2\x3e\x5a\xf9\x87\x3c\x45\xdf\x91\x7c\xb9\x57\x8f\x61\x03\x45\x46\xd5\x65\xb0\xf1\x49\xd4\x10\xd6\xc2\x4b\x81\xc3\xba\xb0\x79\x06\xb1\x73\x29\x24\x9b\x2f\x10\x1a\xca\x29\xe5\x7f\x6b\x92\x03\x97\x2c\x4e\x75\x35\x01\xa9\x17\x7f\xa1\x20\x57\xbc\xa4\x7f\xc8\x71\xf9\x2a\xfe\xae\xe1\xd8\xc2\x4d\xfe\xc3\xc4\xbf\x7c\xac\xae\x11\x81\x36\xcd\x6f\x2f\xf4\xbc\x26\x45\x5e\x9d\xfb\xe7\xd5\x19\x88\x85\xa9\xc5\x45\x79\xc6\xcd\x1d\xee\x30\x2d\x0f\xef\x28\xf7\x15\x2f\x13\xeb\x9f\xe8\x32\x0e\x78\x0c\xbc\xa4\x25\x49\x4a\x87\x23\x86\xad\xe1\x1c\x3a\x7a\x0a\xeb\x32\x2e\xdf\x08\x9d\xaf\xdf\x1b\xe4\xbf\x84\xa7\x07\xfc\x8a\x1d\x57\xa2\xad\x7e\x36\xad\xc9\x27\x46\xc5\xfa\x55\x55\x0e\x97\x94\x41\x76\x51\xf7\xff\x02\x00\x00\xff\xff\x3a\x03\xa3\xb4\x4e\x08\x00\x00")
|
||||
var _nameServiceGeneratedClientGrpcClientGotemplate = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x7c\x55\xcd\x6e\xe3\x36\x10\x3e\x8b\x4f\x31\x15\x82\x42\x0a\x14\xea\x9e\xc2\x97\xf5\x6e\x17\x5b\x34\xa9\x91\x0d\xda\xc3\x62\x51\xd0\xd4\x58\x26\x6c\x93\x2a\x49\x3b\x36\x04\xbd\x7b\x31\x14\xe9\xc8\xde\x64\x0f\x41\xc4\x99\x6f\xfe\xbe\xf9\x71\x5d\xc3\x42\xc8\x8d\x68\x11\x5a\xdb\x49\xe8\xac\x39\xa8\x06\x1d\x08\x68\x9f\x16\x73\x90\x5b\x85\xda\xc3\xca\x58\xf0\x6b\x84\xbe\xe7\x5f\xd1\x1e\x94\x44\xfe\x28\x76\x38\x0c\xe0\xe2\x93\x75\x13\x37\x8c\xa9\x5d\x67\xac\x87\x82\x65\x79\x6b\xb6\x42\xb7\xdc\xd8\xb6\x3e\xd6\x1a\x7d\x2d\x8d\xf6\x78\xf4\x79\xd0\x99\x76\x8b\x7c\x02\x21\xf3\xf7\x35\xf5\x0e\xbd\x68\x84\x17\x01\xa2\xfc\x7a\xbf\xe4\xd2\xec\xea\x6e\xd3\xd6\x68\xad\xb1\x2e\x67\x97\x9a\xd6\xdc\x6d\x94\xaf\xe9\x0f\x75\xd3\x19\xa5\x29\x30\xf9\xf2\x56\x68\x17\xb2\x7c\x07\x7f\x06\xc4\xa4\x58\x56\xd7\xf0\xbc\x56\x0e\x22\x07\x2c\x73\x07\x09\x79\xdf\xf3\x2f\xa1\xdc\x85\xf0\x6b\xb8\x1b\x06\xa8\x5b\xd4\x68\x85\xc7\x26\x67\x59\xb7\x0c\x90\xc5\x87\x4b\x50\xce\x4a\xc6\xea\x1a\x1e\xf1\x05\x2c\xfa\xbd\xd5\x0e\x84\x4e\x7c\xc2\x52\xc8\x0d\x36\xb0\x3c\x5d\x75\x42\x1a\xad\x51\x7a\x65\x34\x87\x2f\x1e\x94\xa3\xbe\xb0\xd5\x5e\x4b\xf2\x54\x90\x1a\x6e\x29\x5f\x3e\x0f\x06\x73\xa3\x75\x05\xa6\x23\x0b\x07\x9c\x47\xf1\x5f\x41\x50\x42\xd1\x2d\x79\xdf\x7f\x36\xd4\x4d\xb8\xea\x2d\xbd\xd0\x56\x10\x88\x2d\xa1\x67\xd9\x41\x58\x90\x32\xa6\x32\x37\x7a\xa5\x5a\xc6\x32\x1a\x8e\x7f\x2b\x58\xc1\xfd\x0c\xac\xd0\x2d\x9e\xc3\xf5\x2c\xcb\xd0\x5a\x52\xac\x8a\x5f\xa5\x2c\x59\x96\xa9\x15\x39\x84\x5f\x66\xa0\xd5\x36\x20\xb2\xb1\x7c\x7a\xc7\x60\x8e\xff\x63\x45\x57\xa0\xb5\x15\xe4\x52\x68\x6d\x3c\x88\xae\xdb\x9e\xa2\xe7\x9c\x1c\x0d\x2c\x1b\x18\xcb\xe4\xa4\x1e\x47\x91\xbe\x7d\xbf\xe8\xee\x45\xc1\x14\xee\x2d\xed\x07\x5c\x19\x8b\x05\x25\x13\xa7\xf3\x6f\xb1\xdd\xa3\x7b\x36\x9f\x9f\x16\xf3\x87\x38\x74\x85\x94\x7c\x8d\xa2\x41\xeb\xca\xb2\xa2\xf0\x59\xdf\xdf\xc1\x8b\xf2\x6b\xb8\xf1\x48\xc1\xf9\x30\xb0\x6c\x22\xed\x36\x6d\xa0\xf6\x7e\x46\x08\x1e\x77\x6d\xe4\x97\xa2\x11\x72\xe4\xec\x46\x25\x50\xea\xc2\x03\xfa\xb5\x69\xdc\x08\x0c\xdc\xf7\xfd\xb3\xf9\xd3\xbc\xa0\x85\x1b\x15\x9b\xf4\x29\x0e\x35\xa4\xe9\xe6\x49\x12\xac\x02\xbf\x14\xe6\x7d\xc3\x19\x5c\x32\xf2\x88\x2f\x23\x29\xc5\x68\x4b\x8c\xe8\x2a\x7e\xe7\x7d\x9f\x6a\x1a\x06\xde\xf7\xd3\x7c\x47\x61\x3e\x85\xaa\x6b\xa1\x3b\x48\xfe\x49\x4b\xd3\x20\x11\x3b\x41\x3c\xe1\x7f\x7b\x74\x7e\x8a\xfb\x88\x6f\xe2\x5c\x67\xb4\xc3\x04\x9c\xce\xef\x8d\xe2\x49\xfd\x7c\xea\x52\x42\xfd\x90\xb0\x17\xa3\xc2\x39\x8f\xf2\xf2\x4c\x59\x51\x06\x49\xec\x0c\xea\x26\x76\x33\x7e\xa5\x0f\x96\x26\x76\xac\x66\xb4\x75\x3d\x01\xa6\xbd\xbc\x6e\x24\x6d\x7d\x70\xf7\x43\x0f\xee\x01\xe0\x67\xcd\xad\x5e\x63\x67\x43\x45\x8b\xc2\x06\xc6\xfc\xa9\xc3\x8b\x5d\x04\xe7\xed\x5e\x7a\x5a\xaa\x38\xa6\xf0\xed\xbb\xf3\x56\xe9\x96\xf0\x75\x0d\xd3\x5d\xa0\xdb\x21\x80\x2e\x47\x78\xf9\xb5\xf0\xb0\x33\x8d\x5a\x29\x0c\x47\x65\x72\x71\x68\xcf\x43\xb4\x0b\x7b\x32\x2d\x6e\xa7\x09\x94\xe3\xfa\xb2\xf1\x1e\xcd\xfd\x31\x6d\xd1\x57\xd4\x4d\xb1\xc1\x53\xb8\x40\x63\x46\xe5\xa5\xb3\xfe\x4c\x6a\x70\x6b\xe0\x2d\xc7\xe1\x5c\x98\xb4\x83\x30\x03\x72\xc9\xa6\x07\x84\x96\x72\x88\xf1\x7f\xb6\xc9\x21\x97\x44\x4e\x79\xb5\x01\x71\x16\x7f\x27\x27\x57\x79\x49\x7f\x4c\x7e\xf9\x7c\xfc\x5f\xc1\xae\x81\xdb\xf4\xc3\xc4\x1f\x3e\x96\xd7\x88\x90\x36\xed\x6f\x27\xd4\xb4\x27\x59\x3a\x9d\x9b\xd7\xd3\x19\x12\x0b\x5b\xab\x56\x70\xa8\xc0\x04\x9d\xf4\x47\x1e\xea\x28\x36\x25\x2f\x62\xd6\xbf\x91\x72\x5c\xf0\xd1\xf1\x8c\x8e\x24\x31\x1d\x9e\x15\x6c\x2a\x38\x84\x89\x1e\xc2\xb9\x1c\x8f\xef\x08\x9d\x9e\xdf\xdb\x5d\x03\x33\x38\x17\xf0\x87\x51\xba\xb8\xdd\x35\xd5\xab\x68\x41\x36\xa3\x57\xce\x79\x59\x26\x77\x91\x19\xe9\x8f\x23\xef\xff\x07\x00\x00\xff\xff\x3a\x03\xa3\xb4\x4e\x08\x00\x00")
|
||||
|
||||
func nameServiceGeneratedClientGrpcClientGotemplateBytes() ([]byte, error) {
|
||||
return bindataRead(
|
||||
|
@ -151,12 +151,12 @@ func nameServiceGeneratedClientGrpcClientGotemplate() (*asset, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
info := bindataFileInfo{name: "NAME-service/generated/client/grpc/client.gotemplate", size: 2126, mode: os.FileMode(436), modTime: time.Unix(1478128977, 0)}
|
||||
info := bindataFileInfo{name: "NAME-service/generated/client/grpc/client.gotemplate", size: 2126, mode: os.FileMode(436), modTime: time.Unix(1478654064, 0)}
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
return a, nil
|
||||
}
|
||||
|
||||
var _nameServiceGeneratedClientHttpClientGotemplate = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x2c\xcb\x31\x0e\xc2\x30\x0c\x05\xd0\x9d\x53\x78\xae\x44\x7c\x08\x96\x8e\x48\xe4\x02\x51\xf9\x84\x0a\x13\x47\xce\x67\x8a\x7a\x77\x18\xd8\xdf\x9b\x53\x17\xb9\x01\x52\xfd\xcc\xf8\x8c\xa1\x15\xad\xfa\x6b\xa7\x3e\xc9\xce\x28\x6d\x74\x0f\x2a\xf1\xee\x56\x88\x54\x5d\x1e\x1e\xb2\xf9\x1d\xb2\xe8\x71\x9c\xe6\xdc\x8a\x99\xa4\x35\xe7\xeb\x0a\xeb\x88\x74\xb1\x1d\x8d\xf9\x5f\x24\xfd\xd4\x37\x00\x00\xff\xff\x0b\x3c\x4c\x9e\x69\x00\x00\x00")
|
||||
var _nameServiceGeneratedClientHttpClientGotemplate = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x2c\xcb\xb1\x0d\xc2\x30\x10\x05\xd0\x3e\x53\x5c\x1d\x09\xdf\x10\x34\x29\x91\xc8\x02\x56\xf8\x98\x88\xc3\x67\x9d\x3f\x95\xe5\xdd\x69\x18\xe0\x8d\xa1\xab\xdc\x01\x29\x7e\x61\x7c\x7b\xd7\x82\x5a\xfc\x7d\x52\x5f\x64\x63\xe4\xda\x9b\x07\x95\xf8\x34\xcb\x44\x2a\x2e\x4f\x0f\x39\xfc\x01\x59\x75\xce\x65\x8c\x23\x9b\x49\xda\xf6\xfd\xb6\xc1\x1a\x22\x5d\xed\x44\xe5\xfe\x27\x92\xe6\x5c\x7e\x01\x00\x00\xff\xff\x0b\x3c\x4c\x9e\x69\x00\x00\x00")
|
||||
|
||||
func nameServiceGeneratedClientHttpClientGotemplateBytes() ([]byte, error) {
|
||||
return bindataRead(
|
||||
|
@ -171,12 +171,12 @@ func nameServiceGeneratedClientHttpClientGotemplate() (*asset, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
info := bindataFileInfo{name: "NAME-service/generated/client/http/client.gotemplate", size: 105, mode: os.FileMode(436), modTime: time.Unix(1477930115, 0)}
|
||||
info := bindataFileInfo{name: "NAME-service/generated/client/http/client.gotemplate", size: 105, mode: os.FileMode(436), modTime: time.Unix(1478654064, 0)}
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
return a, nil
|
||||
}
|
||||
|
||||
var _nameServiceGeneratedEndpointsGotemplate = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x8c\x55\x5f\x6f\xdc\x36\x0c\x7f\x3e\x7f\x0a\x2e\x08\xb0\xbb\xc1\xd1\xbd\x0f\xe8\xcb\x8a\xfd\xc9\x43\x8b\x62\xed\x17\xd0\xc9\xb4\x2d\x44\x96\x5c\x49\xbe\x24\x33\xfc\xdd\x47\x4a\xb6\xe3\xec\x8c\xa1\x05\x1a\xdb\x14\xf9\x23\xf9\xfb\x91\xba\x5e\xaa\x27\xd9\x20\x84\xab\x2a\x8a\xf3\x19\xbe\xb5\x3a\x40\xad\x0d\x82\x72\x36\x4a\x6d\x03\x74\x18\x5b\x57\x05\x88\x0e\x3a\xf9\x84\xa0\x6d\xa5\xaf\xba\x1a\xa4\x01\xb4\x55\xef\xb4\x8d\x14\xe2\x5d\x07\x01\xfd\x55\x2b\x0c\x25\x23\x79\xfc\x3e\x60\x88\x20\x6d\x45\xef\xa1\x77\x36\x20\xc4\xd7\x1e\x13\x12\xbb\xd2\x67\xeb\xc8\xb8\xa2\x94\x20\x03\x3c\xa3\x31\xfc\x44\xab\x5c\x85\x3e\x30\x00\xe3\x55\x38\x7f\xd7\xce\xcf\x81\x09\xad\x4c\x06\x49\x41\xae\x06\x37\x78\x08\x43\xdf\x3b\x1f\xb1\x82\xe8\xa5\x0d\xfc\xce\xe9\xb4\x34\xfa\x1f\x19\xb5\xb3\x8c\x46\x31\x9d\x8c\x41\xc0\x23\x55\x68\x82\xa3\xae\x94\x19\x2a\x0c\x6b\x35\xd0\xe9\xaa\x32\xf8\x2c\xa9\x78\x51\x14\xba\x4b\x40\xc7\xe2\x70\xd7\x38\x23\x6d\x23\x9c\x6f\xce\x2f\x67\x8b\xf1\xcc\x54\xe1\x4b\xbc\x2b\xf8\x50\xc7\x76\xb8\x08\xe5\xba\x73\xe3\x1e\x9e\x74\x3c\xf3\xff\x05\x94\x5d\xfa\x0b\xdc\x8d\xa3\xf8\xf2\xdb\x63\x82\xfc\x22\x63\x0b\x0f\xd3\x74\x57\x9c\x92\x02\xbf\xaf\x9c\x2a\x67\x0c\x2a\x7a\x99\x9b\x8b\xed\x86\x2b\xfa\x92\x91\x5c\x08\x83\x98\x90\x16\x64\x55\x2d\x02\x70\x57\x3f\x07\x06\xeb\x50\x52\x27\xc4\xf7\x05\x61\x08\x44\x09\x11\x2b\xa1\x45\xd3\x23\x11\x15\xfd\xa0\x62\xc9\xc7\x73\xaa\xfd\x4c\xf4\xc7\x81\x64\xb8\xa0\x6d\x43\xa3\xd1\x4b\x2f\x69\x2a\xd0\x0b\x32\xb2\xfd\x91\xd2\x67\x49\x7d\x09\x9a\x72\x73\xb2\x7a\x30\x49\x9a\x7a\xb0\x8a\x69\x9f\x4b\xb6\xc8\xca\x38\x70\x54\x82\x8c\x08\x8e\x63\xe9\xfd\x61\x49\xc8\x80\x17\x19\x34\x89\xf3\x07\x85\xe3\x8b\xec\x7a\x83\x25\xbc\xba\x81\x34\x69\xda\x48\xf9\x03\x8f\xc5\x86\x2a\x2e\x70\x4d\x94\xf3\xf4\xde\x55\x03\x0d\x23\xc3\x91\x6f\x1b\x63\x2f\xfe\xa2\x59\x32\x5c\xe3\x33\xa9\x04\x28\x55\x3b\x4f\x37\x1c\x97\xec\x27\x3a\xf3\x54\xe1\xd0\x67\xd0\xd0\xa3\xd2\xb5\x56\x94\x34\xb6\x02\x8e\x8f\xa9\x3e\x5a\x12\xc2\xbf\xc8\x8b\x79\x25\x9f\x4e\x87\x98\x37\x83\xa6\x34\xe8\xc6\x72\xa8\xb6\x57\xf7\x84\x89\xca\xaf\x59\x96\x75\x93\x52\x89\xf8\x5e\xec\x2c\x06\x43\x2c\x4c\x8a\xd3\x96\x5d\x65\x34\xda\xf8\x9e\xdd\x8d\x70\x6f\x4b\x49\x15\xd1\x3c\x66\x38\xea\xe3\x7f\x64\xe4\xf5\xc9\x5c\x69\x66\xb8\xc3\x3c\x56\x6f\xf5\x52\x04\xfa\x5a\xf2\x40\xed\x2b\xc1\x60\x6b\xb2\xfd\x8b\x61\xe0\x64\x6f\x9b\x78\x4e\x3a\x7c\xc6\xe7\x8f\x73\x3f\x34\xc1\x17\x6d\x13\x4f\x5d\x62\x36\x55\xb9\xd1\xb6\x9c\x6f\x90\x38\x78\x4b\xdd\x73\xd3\x5c\xa3\xa2\x4e\x69\x86\xd3\x3c\xcf\xf5\x8a\x22\x75\x74\xc3\xe9\x58\x8c\x23\xe5\xa7\x5b\xee\x5e\xc3\xaf\x1f\x40\x2c\xfe\x9f\xb2\x1e\xd3\x54\x1c\xc6\xf1\x5e\x8b\xcf\x34\xd5\xd3\xb4\xc4\x03\xfd\x5b\xfa\x10\x8b\x91\xa0\x1e\xd8\x4a\x31\xd3\xfb\x75\xfd\x81\x24\x3c\xa0\x34\x69\x6f\x31\x27\xd8\xe4\x3d\xaa\xf8\x02\xf3\x55\x22\x3e\xe6\x67\xc9\x03\xf1\x4b\x7f\x11\xe3\xf8\xa7\x63\x37\x42\x17\x7f\xe7\x9b\xf5\x1b\x35\x3b\x87\x9e\xe0\x78\xeb\x94\xaf\xdc\x8d\x57\x09\xe8\xbd\xf3\x94\xb4\x38\x1c\x96\x2b\x39\x19\xb9\x60\x14\x3b\x1c\x70\x4d\x5c\xc3\x89\x22\x74\x9d\x5c\x7f\xfa\x00\x56\x9b\x84\x71\x98\x55\xa1\xef\x04\x43\xa6\xa9\x58\xad\x4b\x06\xf1\x23\xb5\x9d\x4a\x46\x29\x28\x7e\x1c\x33\xbd\x4c\xee\x27\xde\xaa\x2d\xc3\x69\x6f\xef\xe9\xd6\x60\x86\xb3\x6e\x5b\xd2\xe9\x64\x8f\xf7\x4c\x3c\x83\xed\xb5\x48\xab\xcc\xe5\x6d\x63\xb3\xc7\xd7\xb4\x86\xa7\xdb\x21\x78\xd7\x3c\x63\xef\x4b\xb7\xfc\x02\xae\x6b\x34\xb2\x50\xeb\x6f\xe1\xc6\x9c\x45\xd8\xa8\xc3\xe8\xdf\xb9\xa3\x19\x63\x8f\xc3\x9b\x21\x48\x71\xd7\x55\xd0\x20\xfe\x33\x5c\xa9\xa2\xec\xb5\xa3\xe5\x9e\x9a\x59\xcf\xf5\xe4\x3a\x8b\x94\xcd\x89\xfd\xac\xd5\xf2\xfc\x37\x00\x00\xff\xff\x5a\xa4\x38\xcd\x4e\x08\x00\x00")
|
||||
var _nameServiceGeneratedEndpointsGotemplate = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x8c\x55\xdd\x6e\xdc\x38\x0f\xbd\x1e\x3f\x05\xbf\x20\x40\x67\x3e\x4c\x34\xf7\x0b\xf4\x66\x8b\xfd\xc9\x45\x8b\x62\xdb\x17\xd0\xc8\xf4\x98\x88\x2c\xa9\x12\x3d\xc9\xac\xe1\x77\x5f\x50\xb2\x1d\x67\x63\x2c\x7a\x11\x38\x43\x53\x87\x87\xe7\x90\x72\xd0\xe6\x49\x5f\x10\xd2\xd5\x54\xd5\xe9\x04\xdf\x5b\x4a\xd0\x90\x45\x30\xde\xb1\x26\x97\xa0\x43\x6e\x7d\x9d\x80\x3d\x74\xfa\x09\x81\x5c\x4d\x57\xaa\x7b\x6d\x01\x5d\x1d\x3c\x39\x4e\xd0\x44\xdf\x41\xc2\x78\x25\x83\xe9\x28\x48\x11\x7f\xf4\x98\x18\xb4\xab\x21\x62\x0a\xde\x25\x04\xbe\x05\xcc\x48\x92\x8a\xc0\xad\x4f\xf8\x8a\x72\x04\x9d\xe0\x19\xad\x95\x27\x3a\xe3\x6b\x8c\x49\x00\x04\xaf\xc6\xe9\x77\xe3\xe3\x74\x30\xa3\x1d\x73\x40\x5b\x0b\xbe\x01\xdf\x47\x48\x7d\x08\x3e\x32\xd6\xc0\x51\xbb\x24\xff\x4b\x39\xd2\x96\xfe\xd6\x4c\xde\x09\x5a\xe3\x63\xa7\x39\x29\x78\x64\xd0\x36\x79\x20\x67\x6c\x5f\x63\x5a\xd8\x40\x47\x75\x6d\xf1\x59\x47\x4c\xaa\xaa\xa8\xcb\x40\xfb\x6a\x77\x77\xf1\x56\xbb\x8b\xf2\xf1\x72\x7a\x39\x39\xe4\x93\x48\x85\x2f\x7c\x57\xc9\x4b\xe2\xb6\x3f\x2b\xe3\xbb\xd3\xc5\x3f\x3c\x11\x9f\xe4\x6f\x06\x95\x94\x70\x86\xbb\x61\x50\x5f\x7f\x7d\xcc\x90\x5f\x35\xb7\xf0\x30\x8e\x77\xd5\x21\x3b\xf0\xdb\xa2\xa9\xf1\xd6\xa2\xe1\x34\x37\xc7\xed\x4a\x2b\xe0\x56\x33\x18\xdf\x05\x51\x42\x3b\xd0\x75\x3d\x1b\x20\x5d\x7d\x48\x02\xd6\xa1\x76\x2c\x7a\x9f\x11\xfa\x84\xb5\x08\xab\xa1\x45\x1b\x30\x42\xe2\xd8\x1b\x3e\xca\xeb\xa9\xd4\x76\x25\x72\xec\x41\x0b\x5c\x22\x77\xb1\x08\x41\x47\xdd\x21\x63\x54\xd5\xe9\x24\xf1\x47\x07\xba\x58\x1a\x8f\x40\xfc\x21\x49\xb1\xa6\xb7\xd9\x9a\xa6\x77\x46\x64\x9f\x28\x3b\x14\x67\x3c\xf8\x80\x51\x33\x82\x97\xb3\x01\xe3\xc3\x5c\x50\x00\xcf\x3a\x51\x52\xf0\xbb\x8f\x80\x2f\xba\x0b\x16\x8f\x70\xf3\x3d\x74\x74\x69\x19\x82\x4e\x32\x16\x2b\xa9\x84\xe0\x52\xa8\xd4\x09\xd1\xd7\xbd\xc1\x2c\x83\x76\xd0\x32\x07\xf5\xa7\x76\xb5\x15\x8e\xcf\xc4\x2d\xa0\x36\xed\x34\xdd\xb0\x9f\xab\x1f\xe0\x99\x22\xd6\xd0\x87\x02\x9a\x02\x1a\x6a\xc8\x40\xd0\xdc\x2a\xd8\x3f\x66\x7e\x94\x04\xff\xac\xcf\xf6\x06\x1a\x3a\x4a\x5c\x36\x03\x6a\x4c\x74\x71\x72\x94\xdc\xd5\x3f\x61\x96\xf2\x5b\xb1\x65\xd9\xa4\x4c\x11\xdf\x9a\x5d\xcc\x10\x88\x59\x49\x75\x58\xab\x6b\x2c\xa1\xe3\xb7\xea\xae\x8c\x7b\x5d\x4a\x7b\x93\xd5\x2d\x70\x58\xff\x97\x8d\xb2\x3e\x45\x2b\x12\x85\x3b\x2c\x63\xf5\xca\x97\x1c\x63\x6c\xb4\x0c\xd4\xb6\x13\x02\xb6\x14\xdb\xbe\x18\x7a\x29\xf6\xba\x89\xa7\xec\xc3\x17\x7c\xfe\x34\xf5\x63\x7c\x77\x26\x97\x75\xea\xb2\xb2\x99\xe5\xca\xdb\xe3\x74\x83\x70\x1f\x1d\x50\x1e\x66\xe1\x68\xb4\xb5\x18\xcb\x3c\x4f\x7c\x55\x95\x3b\x7a\xa7\xe9\x50\x0d\x43\xd4\xee\x82\x70\x4f\xf0\xcb\x47\x50\x73\xfe\xe7\xe2\xc7\x38\x56\xbb\x61\xb8\x27\xf5\x45\x77\x38\x8e\xf3\x79\x00\x58\xfa\x50\x73\xb0\x1a\x86\x07\x89\x8e\x63\x35\xbe\x5d\xd7\x9f\x28\x22\x03\x0a\xfb\x15\xc3\x03\xac\xea\xee\x0d\xbf\xc0\x74\x95\xa8\x4f\xe5\x79\x94\x81\xf8\x7f\x38\xab\x61\xf8\xc3\x4b\x1a\xdc\x93\xfa\xab\xdc\xac\xdf\x6f\x01\xa7\xa3\x07\xd8\xbf\x4f\x2a\x57\xee\x2a\xeb\x08\x18\xa3\x8f\x07\x18\xaa\xdd\x6e\xbe\x92\x73\x50\x08\xa3\xda\xd0\x40\x38\x09\x87\x43\xb5\xdb\x51\x93\x53\xff\xf7\x11\x1c\xd9\x8c\xb1\x9b\x5c\x71\x64\x33\x4c\xb5\xdb\x8d\xd5\x12\x9d\x2b\xa8\x9f\xe1\x76\x38\x0a\x4a\xb5\x1b\xab\x61\x28\xf2\x8a\xb8\x9f\x65\xab\xd6\x0a\xe7\xbd\xbd\x67\xcc\x0a\x17\xdf\xd6\xa2\xdf\x33\x6e\xe9\x5e\x84\x17\xb0\xad\x16\x13\x64\x7a\xeb\xb3\x25\xe3\x5b\x5e\xc3\xc3\xfb\x21\x78\xd3\xbc\x60\x6f\x5b\x37\x7f\x01\x97\x35\x1a\xc4\xa8\xe5\x5b\xb8\x0a\x17\x13\x56\xee\x08\xfa\x0f\xe9\x68\xc2\xd8\xd2\xf0\xdd\x10\xe4\x73\xd7\xc5\xd0\xa4\xfe\x35\x5c\x99\x51\xc9\xda\xf0\x72\xcb\xcd\xe2\xe7\xf2\xe6\x3a\x99\x54\xc2\x59\xfd\xe2\xd5\xfc\xfc\x27\x00\x00\xff\xff\x5a\xa4\x38\xcd\x4e\x08\x00\x00")
|
||||
|
||||
func nameServiceGeneratedEndpointsGotemplateBytes() ([]byte, error) {
|
||||
return bindataRead(
|
||||
|
@ -191,12 +191,12 @@ func nameServiceGeneratedEndpointsGotemplate() (*asset, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
info := bindataFileInfo{name: "NAME-service/generated/endpoints.gotemplate", size: 2126, mode: os.FileMode(436), modTime: time.Unix(1478128977, 0)}
|
||||
info := bindataFileInfo{name: "NAME-service/generated/endpoints.gotemplate", size: 2126, mode: os.FileMode(436), modTime: time.Unix(1478654064, 0)}
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
return a, nil
|
||||
}
|
||||
|
||||
var _nameServiceGeneratedTransport_grpcGotemplate = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xa4\x57\xdf\x6f\xdb\x36\x10\x7e\xb6\xfe\x8a\x9b\x51\x0c\x56\x10\xcb\x7b\x2e\x90\x97\xa6\x5d\x53\x6c\xe9\x82\x2e\xd8\x1e\x8a\xa2\xa0\xa5\xb3\x4c\x58\x12\x15\x92\x76\x92\x09\xfe\xdf\x77\x47\x4a\xb2\xfc\x23\xb2\xda\x3c\x04\x0e\xc5\xfb\xf1\xdd\xf7\xdd\x51\x54\x29\xe2\x95\x48\x11\xcc\x26\x0e\x82\xd9\x0c\xee\x97\xd2\xc0\x42\x66\x08\xa5\x56\x1b\x99\xa0\x01\x83\x7a\x83\x7a\x6a\x68\x01\x73\x59\x24\xb2\x48\xc9\x44\x69\xb0\x4b\x84\xf4\xcb\xdd\x35\x58\x2d\x0a\x53\x2a\x6d\x23\x0e\xf1\xc9\xc2\xda\xca\x4c\xfe\x47\xbe\x6c\xd2\xee\xce\x52\x5d\xc6\xd1\xdf\x2e\x5c\x14\x04\x32\xe7\x87\x30\x09\x46\xe3\x02\xed\x6c\x69\x6d\x39\x0e\x68\x91\xaa\x4c\x14\x69\xa4\x74\x3a\x7b\x9a\xf1\x4e\xac\x0a\x8b\x4f\x76\xec\xf6\x54\x9a\x61\xd4\x31\xe1\x98\xb3\x1c\xad\x48\x84\x15\xec\xcf\x0f\xda\x94\x30\x4e\xa5\x5d\xae\xe7\x51\xac\xf2\x59\xaa\xa6\x2b\x69\x67\xfc\xb7\x8f\x89\xdd\x9a\xda\x19\x9e\x8c\x31\x18\x95\x73\x18\x57\x55\x74\xf7\xee\x93\xc3\x79\x27\xec\x12\xa6\xdb\xed\x38\x08\x03\xc7\xd4\xad\x58\xe1\x47\xaa\xde\xd7\x03\x39\x2d\x0d\x08\x62\xcb\x82\x5a\x00\x16\x49\xa9\x64\x61\xe9\xd1\x46\xc8\x4c\xcc\x89\x51\xc1\xfb\x8e\xb0\xaa\xfa\xa8\x3e\x8b\x1c\x21\xaa\xd3\x45\xbc\xda\x6e\x1b\x6e\x16\xeb\x22\x3e\x48\x30\x89\xed\x13\xd4\x4c\x44\xd7\xfe\xf7\xb2\x93\xe6\x43\xf3\x5f\x08\xe5\x3c\xea\x4f\x00\x55\x30\xf2\xaa\xfe\x55\x5a\xa9\x0a\x03\x6f\xaf\xe0\xeb\xb7\x3d\xe6\x6a\x9d\xbc\x01\xd9\x8f\xe0\xd4\xf6\x3b\xa4\x46\xc0\x49\xc3\xff\xbd\xaa\x91\x85\x97\xc1\x68\x1b\x8c\x34\xda\xb5\x2e\xe0\x57\x76\xf5\x0e\x95\x63\xba\xaa\xe0\x5e\xfd\xa9\x1e\x09\xca\x1e\x40\xd8\x92\x53\x55\x51\x12\x6a\xc9\x37\x92\x61\xb5\xfb\xb7\x68\x97\x2a\x31\x6c\x41\x26\x8d\xfb\x1b\x59\x57\xf6\xf6\x00\xdf\x67\x7c\xac\x89\x23\xfb\x11\x91\x77\xc9\xbf\x2d\x5f\xc4\x50\xeb\xda\x50\xe7\x2c\xde\x63\xac\x12\xc7\x7b\xc7\xe2\x0b\x3e\xac\xd1\x78\x83\x0f\xc5\x49\x03\xca\x5a\x18\x74\x16\x7b\xd4\x46\x51\xc4\x0f\x99\x90\xaa\x9a\xb2\x60\x5c\xc1\x36\xd8\xba\x26\xda\x11\x03\x34\x0e\x19\xe6\xc8\x5a\xf2\xd4\x9c\x51\x90\xe0\xa2\x5e\x08\x6a\x54\xfb\x5c\x62\x37\x8e\xb1\x7a\x1d\x5b\x92\xf8\x3c\x8f\x27\x68\x04\x38\xe0\xf1\x46\x14\x49\x86\x3a\xd8\x81\xf7\xc8\xeb\x30\xee\x20\xe8\x64\xb7\x6a\x57\xc8\xf0\x1a\xce\x42\x75\x03\x31\x31\x70\xb1\x4b\x15\xee\xc2\xb7\xe8\x4f\x0f\x89\xc6\x07\xb8\xe8\x0e\x05\xd9\xd7\x8a\xde\x13\x79\xb5\x6f\x08\x93\x63\x23\xaf\x6a\xc7\x8a\x46\x4e\x6b\xc5\xc9\x83\xd1\x77\x0e\x5d\xba\x27\x0c\x9b\x7b\xea\x88\x4f\x3f\x27\xdc\x2d\x8c\xcd\x61\x09\x83\x91\x5c\x38\xa7\x5f\xae\xa0\x90\x19\x87\x6a\x26\x85\x96\x2e\x5e\x77\x7a\x28\x47\x34\x04\x5a\x78\xc9\xee\x24\x4f\x55\x79\xa1\x58\xa6\x9a\x6a\xdf\xd5\xe7\x79\x26\x8f\xbe\x01\x00\xc9\x47\xd8\xc1\x81\xee\x1d\x6a\x8b\xdf\x59\x28\xbb\x14\x96\x65\xa0\xcc\x7c\x00\xba\x46\xf7\xc7\xde\x71\xbf\xe9\x3a\x32\x35\x8e\x80\x35\x8d\xce\x34\x51\xb9\x90\x45\x9f\x71\x04\x77\x5a\xe6\x42\xcb\xec\x99\x5d\x16\xeb\x8c\x7a\xc9\x9d\xbd\x9d\xe3\xb3\xaf\x8e\xc9\xf7\xe3\x2e\xe1\x5a\x68\x7b\xd7\x95\x15\xb7\x44\x67\xd5\x95\x9e\x5b\x8a\x18\xac\x7d\x4e\xc9\x73\xd4\x5e\x1d\x3d\x1f\x8e\x94\x62\x8a\xae\x33\xc9\x43\xf3\x7a\xa9\x7c\x67\xf4\x6a\xe5\x4d\x7e\x42\xac\x92\x28\x1f\x28\x95\xcf\xf1\x92\x56\xb1\xab\xb6\x5f\x2b\x1f\xe1\x65\xb1\x18\xcc\x40\xb9\xd8\xb4\x15\x8c\x16\xc3\x26\xaa\x3b\x83\xd9\x73\xcf\x7c\xf9\x97\xc2\x20\xd1\x7a\xdf\x1f\x27\x45\xf3\x1e\xe7\x44\x1b\x2a\x88\x97\xaf\x5f\xe2\x41\x03\xd6\x5b\xc8\x29\xd1\x5a\x04\x03\x35\x33\x25\xb3\xd8\x36\xd2\x8f\x2a\x66\xca\xbe\x31\x7b\xbd\x62\x2f\x9f\x88\x8d\x60\xbd\x27\xe2\xc0\xb3\xee\xac\x5c\xbd\x27\xe2\xde\x94\xf5\xd5\x71\x5a\xaf\xba\xc4\x1f\x38\x11\x1b\x3c\xaf\x3e\x11\x89\xa1\x1b\xcc\x4a\xd4\x26\xf0\xe8\x8f\xee\x98\xa7\x5f\xf6\x79\x02\x17\x8d\x69\x74\xfb\x3e\x3c\xb4\x60\xac\x7c\x67\x59\x5d\xc2\xc6\x01\x76\xf2\x5f\x90\x1b\xbf\x86\xe9\xc5\xbc\xe9\xbe\x96\xfd\x67\x01\xc2\x0a\x9f\x9d\xd2\x49\x82\x09\xcc\x15\x7d\x0a\x10\xbd\x4d\x1a\xbe\x03\xe5\xa4\xef\x64\x15\xc2\xe3\x52\xc6\x4b\x67\x9a\x65\x90\xb1\x58\x75\x14\xba\x46\xb9\x7b\x1d\x7f\xe6\x44\xd7\xa2\x50\x85\x8c\x45\x76\x83\x22\x41\xfd\x07\x45\xa7\x6f\x06\x5b\x27\x32\xca\xf7\x8b\xa4\x96\x11\x05\xcc\xb1\x09\x11\xc7\x68\x0c\x01\xa0\xdc\x48\x9f\x35\xd4\x08\x3e\x73\x7d\xc3\x85\xab\xb6\xd8\x7f\x69\xfb\x1f\x91\xad\xd1\xdf\x3a\xb8\xd8\xaf\xbf\x7d\x0b\xcf\x1a\xbe\x80\x8e\x2a\xdb\x45\x70\xd7\xd7\x56\x3b\x72\x23\xd9\xfe\x0f\x00\x00\xff\xff\x09\x00\x51\xc2\x47\x0e\x00\x00")
|
||||
var _nameServiceGeneratedTransport_grpcGotemplate = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xa4\x57\x4f\x6f\xe3\xb6\x13\x3d\x8b\x9f\x62\x7e\x46\xf0\x83\x1d\x38\x52\xcf\x01\x72\xd9\xec\x76\xb3\x68\xb3\x0d\xd2\xa0\x3d\x2c\x16\x0b\x5a\x1a\x4b\x84\x29\x52\x21\x69\x27\xae\xa0\xef\x5e\x0c\x29\xc9\x4a\xec\xc8\xde\xe6\x10\x38\x16\xe7\xcf\x9b\xf7\x66\x46\x74\xc5\xd3\x15\xcf\x11\xec\x26\x65\x2c\x49\xe0\xa1\x10\x16\x96\x42\x22\x54\x46\x6f\x44\x86\x16\x2c\x9a\x0d\x9a\x0b\x2b\x32\x84\x85\x50\x99\x50\xb9\x85\xa5\x36\xe0\x0a\x84\xfc\xfe\xee\x1a\x9c\xe1\xca\x56\xda\xb8\x98\x42\x7c\x71\xb0\x76\x42\x8a\x7f\xd0\x7a\x93\xfe\x34\xc9\x4d\x95\xc6\x7f\xfa\x70\x31\x63\xa2\xa4\x87\x30\x65\xd1\x44\xa1\x4b\x0a\xe7\xaa\x09\x63\xd1\x24\xd7\x92\xab\x3c\xd6\x26\x4f\x9e\x13\x3a\x49\xb5\x72\xf8\xec\x26\xfe\x4c\xe7\x12\xe3\x81\x09\xc5\x4c\x4a\x74\x3c\xe3\x8e\x93\x3f\x3d\xe8\x53\xc2\x24\x17\xae\x58\x2f\xe2\x54\x97\x49\xae\x2f\x56\xc2\x25\xf4\xf7\x12\x13\xb9\x75\xb5\x13\x3c\x91\x22\x8b\xaa\x05\x4c\xea\x3a\xbe\xfb\xf0\xc5\xe3\xbc\xe3\xae\x80\x8b\xa6\x99\xb0\x19\xf3\x4c\xdd\xf2\x15\x7e\xbe\xbf\xbb\x0e\xf5\x40\xc9\x57\x68\x81\x83\x45\x07\x7a\x09\xa8\xb2\x4a\x0b\xe5\x2c\xf0\x0d\x17\x92\x2f\x24\x02\xa7\x73\x4f\x58\x5d\x7f\xd6\x5f\x79\x89\x10\xb7\xe9\x62\xfa\xd6\x34\x1d\x37\xcb\xb5\x4a\x5f\x25\x98\xa6\xee\x19\x5a\x26\xe2\xeb\xf0\x39\x1f\xa4\xf9\xd4\xfd\x37\x83\x6a\x11\x8f\x27\x80\x9a\x45\x41\xd5\x3f\x2a\x27\xb4\xb2\x70\x79\x05\xdf\xbe\xbf\x60\xae\xd5\x29\x18\xd4\x2c\x8a\xe0\xd0\xf1\x07\x5c\x6a\x83\xd3\x8e\xff\x07\xdd\x22\x9b\xcd\x59\xd4\xb0\xc8\xa0\x5b\x1b\x05\xff\x27\xd7\xe0\x50\x7b\xa6\xeb\x1a\x1e\xf4\xef\xfa\x09\xcd\x4b\x80\xd0\x34\x2c\xaa\x6b\xc3\x55\x8e\x70\x26\x08\x56\x7f\x7e\x8b\xae\xd0\x99\x25\x8b\xa8\xae\x3b\xf7\x33\xd1\x56\x76\xf9\x0a\xdf\x57\x7c\x6a\x89\x63\x51\x14\xa5\xee\x79\x4e\x9f\x3d\x5f\x71\x5d\xf7\xae\x1d\x75\xde\xe2\x23\xa6\x3a\xf3\xbc\x0f\x2c\xee\xf1\x71\x8d\x36\x18\x7c\x52\x07\x0d\x6c\xa5\x95\x45\x6f\xf1\x82\xda\x38\x8e\xe9\x21\x11\x52\xd7\x17\x24\x18\x55\xd0\xb0\xc6\x37\xd1\x8e\x18\x10\x65\x25\xb1\x44\xd2\x92\xa6\xe6\x88\x82\x42\x39\x34\x4b\x9e\x22\x73\xdb\x0a\x87\x71\xac\x33\xeb\xd4\x41\xcd\x8e\xf3\x78\x80\x46\x80\x57\x3c\xde\x70\x95\x49\x34\x6c\x07\x3e\x20\x6f\xc3\xf8\x45\x30\xc8\xee\xf4\xae\x90\xd3\x6b\x38\x0a\xd5\x0f\xc4\xd4\xc2\xf9\x2e\xd5\x6c\x17\xbe\x47\x7f\x78\x48\x0c\x3e\xc2\xf9\x70\x28\xce\x44\xdc\x2a\xfa\xb0\xad\x3a\x50\x33\x98\xee\x1b\x05\x55\x07\x56\x73\x40\x63\x34\x25\x67\xd1\x0f\x0a\x5d\xf9\x27\x04\x9b\x7a\x6a\x8f\xcf\x30\x27\xd4\x2d\x84\xcd\x63\x99\xb1\x48\x2c\xbd\xd3\xff\xae\x40\x09\x49\xa1\xba\x49\x51\x42\xfa\x78\xc3\xe9\x31\x58\xc5\xa7\x40\x9b\xcd\xc9\x9d\x35\xac\xae\x83\x50\x24\x53\x4b\x75\xe8\xea\xe3\x3c\x27\x09\x8c\x0d\x00\x08\x5a\x61\xaf\x16\x7a\x70\x68\x2d\x7e\x25\xa1\x5c\xc1\x1d\xc9\xb0\x41\x43\x0b\xd0\x37\x7a\x58\x7b\xfb\xfd\x66\xda\xc8\x4e\x03\x87\xb5\x45\x73\x91\xe9\x92\x0b\x35\x66\x1c\xc3\x9d\x11\x25\x37\x42\x6e\xc9\x65\xb9\x96\x20\x94\xdf\xbd\x83\xf5\x39\x56\xc7\xf4\xc7\x7e\x97\x50\x2d\xf7\xf8\xb8\xeb\xca\x9a\x5a\x62\xf0\x6d\x28\x3d\xb5\xd4\xe5\x55\xe7\x73\x48\x9e\xbd\xf6\x1a\xe8\xf9\xb8\xa7\x14\x51\x74\x2d\x05\x0d\xcd\xfb\xa5\x0a\x9d\x31\xaa\x55\x30\xf9\x0f\x62\x55\x72\x7b\xaa\x54\x21\xc7\x5b\x5a\xa5\xbe\xda\x71\xad\x42\x84\xb7\xc5\x22\x30\x27\xca\x45\xa6\xbd\x60\x95\xdc\x9e\x36\x51\xc3\x19\x94\xdb\x91\xf9\x0a\x2f\x85\x93\x44\x1b\x7d\x7f\x1c\x14\x2d\x78\x1c\x13\xed\x54\x41\x82\x7c\xe3\x12\x9f\x34\x60\xa3\x85\x1c\x12\xad\x47\x70\xa2\x66\xb6\x22\x16\xfb\x46\xfa\x59\xc5\x6c\x35\x36\x66\xef\x57\xec\xed\x8d\xd8\x09\x36\xba\x11\x4f\xdc\x75\x47\xe5\x1a\xdd\x88\x2f\xa6\x6c\xac\x8e\xc3\x7a\xb5\x25\xfe\xc4\x46\xec\xf0\xbc\x7b\x23\x26\x09\xdc\xa0\xac\xd0\x58\x16\xd0\xef\xdd\x31\x0f\xbf\xec\xcb\x0c\xce\x3b\xd3\xf8\xf6\xe3\xec\xb5\x05\x61\xa5\x3b\xcb\x6a\x0e\x1b\x0f\xd8\xcb\x7f\x5e\x66\xfe\x35\x2c\x96\xb0\x19\xbe\x96\xc3\xcf\x02\x84\x15\x6e\xbd\xd2\x59\x86\x19\x2c\xb4\x2b\x88\xde\x2e\x0d\xdd\x81\x4a\xee\x60\xba\x9a\xc1\x53\x21\xd2\xc2\x9b\x4a\x09\x92\xc4\x6a\xa3\x70\x95\xf9\x7b\x1d\xfd\xcc\x89\xaf\xb9\xd2\x4a\xa4\x5c\xde\x20\xcf\xd0\xfc\x86\x5b\xfa\xcd\xe0\xda\x44\x56\x87\x7e\x11\x0e\x52\xae\x60\x81\x5d\x88\x34\x45\x6b\x31\xa3\xdc\x28\x5c\x81\xa6\xcd\xdc\xde\x70\xe1\xaa\x2f\xf6\x6f\xe1\x8a\xbf\xb8\x5c\x63\xb8\x75\x50\xb1\xdf\x7e\xf9\x3e\x3b\x6a\xf8\x06\xba\xe9\x6a\xb6\x8b\xe0\xaf\xaf\xbd\x76\xa9\x7b\x66\x0d\xfb\x37\x00\x00\xff\xff\x09\x00\x51\xc2\x47\x0e\x00\x00")
|
||||
|
||||
func nameServiceGeneratedTransport_grpcGotemplateBytes() ([]byte, error) {
|
||||
return bindataRead(
|
||||
|
@ -211,12 +211,12 @@ func nameServiceGeneratedTransport_grpcGotemplate() (*asset, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
info := bindataFileInfo{name: "NAME-service/generated/transport_grpc.gotemplate", size: 3655, mode: os.FileMode(436), modTime: time.Unix(1478128977, 0)}
|
||||
info := bindataFileInfo{name: "NAME-service/generated/transport_grpc.gotemplate", size: 3655, mode: os.FileMode(436), modTime: time.Unix(1478654064, 0)}
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
return a, nil
|
||||
}
|
||||
|
||||
var _nameServiceGeneratedTransport_httpGotemplate = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x2c\xcb\x31\x0e\xc2\x30\x0c\x05\xd0\x9d\x53\x78\xae\x44\x7c\x8d\x8e\x48\xcd\x05\xa2\xf2\x09\x88\x50\x47\xce\x87\xc5\xca\xdd\x61\x60\x7f\x2f\x42\x17\xd9\x00\xa9\x76\xa6\xbf\xc7\xd0\x8a\xa3\xda\xf3\x41\xbd\x93\x9d\x5e\x8e\xd1\xcd\xa9\xc4\xab\xb7\x42\xa4\x6a\x72\x33\x97\xdd\xae\x90\x45\xe7\x3c\x45\xec\xa5\x35\x49\x6b\xce\x97\x15\xad\xc3\xd3\x06\xff\xc0\xf3\xbf\x48\xfa\xa9\x6f\x00\x00\x00\xff\xff\xaf\xf5\x0f\x3e\x69\x00\x00\x00")
|
||||
var _nameServiceGeneratedTransport_httpGotemplate = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x2c\xcb\xb1\x0d\xc2\x30\x10\x05\xd0\x3e\x53\x5c\x1d\x09\xdf\x1a\x29\x91\xe2\x05\xac\xf0\x31\x08\x93\xb3\xce\x1f\x1a\xeb\x76\xa7\x61\x80\x37\xa7\xae\xb2\x03\x52\xed\x42\xff\x8c\xa1\x15\x67\xb5\xd7\x93\xfa\x20\x3b\xbd\x9c\xa3\x9b\x53\x89\x77\x6f\x85\x18\xa9\x9a\xdc\xcd\xe5\xb0\x1b\x64\xd5\x88\x65\xce\xa3\xb4\x26\x69\xcb\xf9\xba\xa1\x75\x78\xda\xe1\x5f\x78\xfe\x1b\x49\x11\xcb\x2f\x00\x00\xff\xff\xdd\x3a\x4a\x8f\x6a\x00\x00\x00")
|
||||
|
||||
func nameServiceGeneratedTransport_httpGotemplateBytes() ([]byte, error) {
|
||||
return bindataRead(
|
||||
|
@ -231,12 +231,12 @@ func nameServiceGeneratedTransport_httpGotemplate() (*asset, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
info := bindataFileInfo{name: "NAME-service/generated/transport_http.gotemplate", size: 105, mode: os.FileMode(436), modTime: time.Unix(1479328586, 0)}
|
||||
info := bindataFileInfo{name: "NAME-service/generated/transport_http.gotemplate", size: 106, mode: os.FileMode(436), modTime: time.Unix(1479344635, 0)}
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
return a, nil
|
||||
}
|
||||
|
||||
var _nameServiceHandlersServerServer_handlerGotemplate = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x8c\x92\x5f\x6e\xd4\x30\x10\xc6\x9f\x3d\xa7\x18\xad\x56\x28\x41\x5b\xe7\xbd\x52\x5f\x40\x02\xf1\xd0\xaa\x02\x2e\xe0\x66\xa7\x59\x97\xac\x1d\x6c\x67\xbb\xc8\xf2\x99\x38\x04\x17\x63\xec\x64\x49\xc4\x1f\xd1\xa7\xc4\xf6\x6f\x3e\x7f\xf3\x79\x06\xd5\x7e\x51\x1d\xe1\x41\x99\x7d\x4f\x0e\x40\x1f\x07\xeb\x02\x56\x20\x36\x9d\xed\x95\xe9\xa4\x75\x5d\x73\x6e\x0c\x85\xa6\xb5\x26\xd0\x39\x6c\x00\xc4\xf0\x80\x9b\x18\xe5\xfd\x9b\x0f\x85\xbf\x57\xe1\x80\x57\x29\x6d\xa0\x06\x68\x1a\xbc\xa3\xe7\x4f\xe4\x4e\xba\x25\x74\x14\x46\x67\x3c\x2a\x34\xea\xc7\xf7\x13\xed\xd0\x07\x15\xa8\x27\xef\x91\x2f\xeb\xe9\x48\x86\x37\xb4\x35\x68\x1f\x71\xae\x92\xf0\x38\x9a\x76\x25\x53\xd5\x38\x3c\xc8\x18\xdf\xdb\x3b\x75\x24\x94\x17\x2e\xaf\x52\xca\x2b\x72\x18\x41\x4c\xb7\x61\xb6\x36\x75\xb6\x00\x8c\xc7\x04\x09\x20\x7c\x1b\xe8\x5f\x04\x9b\x73\x63\x1b\x18\x84\x18\x9f\x35\x77\xb5\x0d\x84\xd7\x37\x28\x31\x25\x10\x31\x3a\x8e\x84\x70\xab\xf3\x1e\x1f\xfd\x32\x72\x4b\xe1\x60\xf7\x3e\x43\x82\x03\x88\x71\xab\x67\x73\x4b\x97\x7e\x69\x4f\x88\xd2\x60\xe5\x33\xc9\x32\x7f\xf3\x52\xaf\x55\xaa\x36\x9c\x71\x7e\x00\xf9\x76\xfa\xee\x50\x1b\x7c\xbd\xce\x85\xf1\x8f\xf4\x75\x24\x1f\x3e\x73\x93\x73\x69\x8d\xd5\x9f\x90\x1f\xac\xf1\xb4\xa2\x76\x48\xce\x59\x57\x73\x88\x42\x9c\x94\xe3\x87\xf3\x03\xfe\xbf\x2e\xe3\x05\xbd\x79\x01\x5c\xc4\x97\x14\x9f\x4a\x8a\xbf\x91\xb7\x3c\x19\x1c\x85\x7c\xa7\xa9\xdf\xfb\x3c\x55\xa5\x68\x4a\xf5\xa2\xfe\x34\x0b\x5e\xe3\xac\x48\x66\x7f\x41\x67\x4b\x65\x10\x5e\x65\x6b\x3b\x34\xba\x87\x72\x50\x40\xc6\x62\xbc\xc2\xe9\xef\x67\x00\x00\x00\xff\xff\x14\x16\x8e\x3b\x02\x03\x00\x00")
|
||||
var _nameServiceHandlersServerServer_handlerGotemplate = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x04\xc0\xc1\x0d\x80\x20\x0c\x05\xd0\xbb\x53\xf4\x4c\xa2\x1d\xc6\x09\x88\x7c\xab\x11\xa9\x69\xeb\x89\xb0\x3b\xaf\x77\x4e\xb4\x03\x24\xba\x86\xfd\xee\x2c\x68\xa2\xcf\x1d\x7c\xe5\x56\x2a\x8c\x03\xef\x57\x73\xc0\x37\x51\x3a\xd5\xe8\xd0\x02\x4a\x3c\xc6\x32\x03\x00\x00\xff\xff\xd6\x21\xab\x2e\x3e\x00\x00\x00")
|
||||
|
||||
func nameServiceHandlersServerServer_handlerGotemplateBytes() ([]byte, error) {
|
||||
return bindataRead(
|
||||
|
@ -251,7 +251,7 @@ func nameServiceHandlersServerServer_handlerGotemplate() (*asset, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
info := bindataFileInfo{name: "NAME-service/handlers/server/server_handler.gotemplate", size: 770, mode: os.FileMode(436), modTime: time.Unix(1479328586, 0)}
|
||||
info := bindataFileInfo{name: "NAME-service/handlers/server/server_handler.gotemplate", size: 62, mode: os.FileMode(436), modTime: time.Unix(1479344635, 0)}
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
return a, nil
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче