mirror of
https://github.com/zeromicro/go-zero.git
synced 2025-01-23 17:20:24 +08:00
ca3c687f1c
* Add group & compatible flag * Add group & compatible flag * Support for multiple rpc service generation and rpc grouping * Support for multiple rpc service generation and rpc grouping * Format code * Format code * Add comments * Fix unit test * Refactor function name * Add example & Update grpc readme * go mod tidy * update mod * update mod
55 lines
1.1 KiB
Go
55 lines
1.1 KiB
Go
package parser
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"path/filepath"
|
|
"strings"
|
|
|
|
"github.com/emicklei/proto"
|
|
)
|
|
|
|
type (
|
|
// Services is a slice of Service.
|
|
Services []Service
|
|
|
|
// Service describes the rpc service, which is the relevant
|
|
// content after the translation of the proto file
|
|
Service struct {
|
|
*proto.Service
|
|
RPC []*RPC
|
|
}
|
|
)
|
|
|
|
func (s Services) validate(filename string, multipleOpt ...bool) error {
|
|
if len(s) == 0 {
|
|
return errors.New("rpc service not found")
|
|
}
|
|
|
|
var multiple bool
|
|
for _, c := range multipleOpt {
|
|
multiple = c
|
|
}
|
|
|
|
if !multiple && len(s) > 1 {
|
|
return errors.New("only one service expected")
|
|
}
|
|
|
|
name := filepath.Base(filename)
|
|
for _, service := range s {
|
|
for _, rpc := range service.RPC {
|
|
if strings.Contains(rpc.RequestType, ".") {
|
|
return fmt.Errorf("line %v:%v, request type must defined in %s",
|
|
rpc.Position.Line,
|
|
rpc.Position.Column, name)
|
|
}
|
|
if strings.Contains(rpc.ReturnsType, ".") {
|
|
return fmt.Errorf("line %v:%v, returns type must defined in %s",
|
|
rpc.Position.Line,
|
|
rpc.Position.Column, name)
|
|
}
|
|
}
|
|
}
|
|
return nil
|
|
}
|