1
0
mirror of https://github.com/go-micro/go-micro.git synced 2025-06-18 22:17:44 +02:00
Files
.github
agent
api
auth
broker
client
codec
config
debug
errors
logger
metadata
monitor
network
plugin
proxy
registry
router
runtime
server
service
store
sync
transport
tunnel
util
addr
backoff
buf
ctx
file
grpc
grpc.go
grpc_test.go
http
io
kubernetes
log
mux
net
pool
proto
ring
socket
test
tls
wrapper
web
.gitignore
.golangci.yml
CNAME
Dockerfile
LICENSE
README.md
README.zh-cn.md
_config.yml
defaults.go
event.go
function.go
function_test.go
go.mod
go.sum
micro.go
options.go
service.go
service_test.go
go-micro/util/grpc/grpc.go

58 lines
1.2 KiB
Go
Raw Normal View History

2019-05-30 23:52:10 +01:00
package grpc
import (
"fmt"
"strings"
)
// ServiceMethod converts a gRPC method to a Go method
// Input:
// Foo.Bar, /Foo/Bar, /package.Foo/Bar, /a.package.Foo/Bar
// Output:
// [Foo, Bar]
func ServiceMethod(m string) (string, string, error) {
if len(m) == 0 {
return "", "", fmt.Errorf("malformed method name: %q", m)
}
// grpc method
if m[0] == '/' {
// [ , Foo, Bar]
// [ , package.Foo, Bar]
// [ , a.package.Foo, Bar]
parts := strings.Split(m, "/")
if len(parts) != 3 || len(parts[1]) == 0 || len(parts[2]) == 0 {
return "", "", fmt.Errorf("malformed method name: %q", m)
}
service := strings.Split(parts[1], ".")
return service[len(service)-1], parts[2], nil
}
// non grpc method
parts := strings.Split(m, ".")
// expect [Foo, Bar]
if len(parts) != 2 {
return "", "", fmt.Errorf("malformed method name: %q", m)
}
return parts[0], parts[1], nil
}
2019-06-18 18:51:52 +01:00
// ServiceFromMethod returns the service
// /service.Foo/Bar => service
func ServiceFromMethod(m string) string {
if len(m) == 0 {
return m
}
if m[0] != '/' {
return m
}
parts := strings.Split(m, "/")
if len(parts) < 3 {
return m
}
parts = strings.Split(parts[1], ".")
return strings.Join(parts[:len(parts)-1], ".")
}