1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- package main
- import (
- "fmt"
- "net/http"
- "strings"
- "go-common/app/tool/bmproto/protoc-gen-bm/extensions/gogoproto"
- "github.com/golang/protobuf/proto"
- "github.com/golang/protobuf/protoc-gen-go/descriptor"
- "google.golang.org/genproto/googleapis/api/annotations"
- )
- func getMoreTags(field *descriptor.FieldDescriptorProto) *string {
- if field == nil {
- return nil
- }
- if field.Options != nil {
- v, err := proto.GetExtension(field.Options, gogoproto.E_Moretags)
- if err == nil && v.(*string) != nil {
- return v.(*string)
- }
- }
- return nil
- }
- func getJsonTag(field *descriptor.FieldDescriptorProto) string {
- if field == nil {
- return ""
- }
- if field.Options != nil {
- v, err := proto.GetExtension(field.Options, gogoproto.E_Jsontag)
- if err == nil && v.(*string) != nil {
- ret := *(v.(*string))
- i := strings.Index(ret, ",")
- if i != -1 {
- ret = ret[:i]
- }
- return ret
- }
- }
- return field.GetName()
- }
- type googleMethodOptionInfo struct {
- Method string
- PathPattern string
- HTTPRule *annotations.HttpRule
- }
- // ParseBMMethod parse BMMethodDescriptor form method descriptor proto
- func ParseBMMethod(method *descriptor.MethodDescriptorProto) (*googleMethodOptionInfo, error) {
- ext, err := proto.GetExtension(method.GetOptions(), annotations.E_Http)
- if err != nil {
- return nil, fmt.Errorf("get extension error: %s", err)
- }
- rule := ext.(*annotations.HttpRule)
- var httpMethod string
- var pathPattern string
- switch pattern := rule.Pattern.(type) {
- case *annotations.HttpRule_Get:
- pathPattern = pattern.Get
- httpMethod = http.MethodGet
- case *annotations.HttpRule_Put:
- pathPattern = pattern.Put
- httpMethod = http.MethodPut
- case *annotations.HttpRule_Post:
- pathPattern = pattern.Post
- httpMethod = http.MethodPost
- case *annotations.HttpRule_Patch:
- pathPattern = pattern.Patch
- httpMethod = http.MethodPatch
- case *annotations.HttpRule_Delete:
- pathPattern = pattern.Delete
- httpMethod = http.MethodDelete
- default:
- return nil, fmt.Errorf("unsupport http pattern %s", rule.Pattern)
- }
- bmMethod := &googleMethodOptionInfo{
- Method: httpMethod,
- PathPattern: pathPattern,
- HTTPRule: rule,
- }
- return bmMethod, nil
- }
|