github.com/erda-project/erda-infra@v1.0.9/examples/service/protocol/client/provider.go (about) 1 // Code generated by protoc-gen-go-client. DO NOT EDIT. 2 // Sources: greeter.proto, user.proto 3 4 package client 5 6 import ( 7 fmt "fmt" 8 reflect "reflect" 9 strings "strings" 10 11 servicehub "github.com/erda-project/erda-infra/base/servicehub" 12 pb "github.com/erda-project/erda-infra/examples/service/protocol/pb" 13 grpc "github.com/erda-project/erda-infra/pkg/transport/grpc" 14 grpc1 "google.golang.org/grpc" 15 ) 16 17 var dependencies = []string{ 18 "grpc-client@erda.infra.example", 19 "grpc-client", 20 } 21 22 // +provider 23 type provider struct { 24 client Client 25 } 26 27 func (p *provider) Init(ctx servicehub.Context) error { 28 var conn grpc.ClientConnInterface 29 for _, dep := range dependencies { 30 c, ok := ctx.Service(dep).(grpc.ClientConnInterface) 31 if ok { 32 conn = c 33 break 34 } 35 } 36 if conn == nil { 37 return fmt.Errorf("not found connector in (%s)", strings.Join(dependencies, ", ")) 38 } 39 p.client = New(conn) 40 return nil 41 } 42 43 var ( 44 clientsType = reflect.TypeOf((*Client)(nil)).Elem() 45 greeterServiceClientType = reflect.TypeOf((*pb.GreeterServiceClient)(nil)).Elem() 46 greeterServiceServerType = reflect.TypeOf((*pb.GreeterServiceServer)(nil)).Elem() 47 userServiceClientType = reflect.TypeOf((*pb.UserServiceClient)(nil)).Elem() 48 userServiceServerType = reflect.TypeOf((*pb.UserServiceServer)(nil)).Elem() 49 ) 50 51 func (p *provider) Provide(ctx servicehub.DependencyContext, args ...interface{}) interface{} { 52 var opts []grpc1.CallOption 53 for _, arg := range args { 54 if opt, ok := arg.(grpc1.CallOption); ok { 55 opts = append(opts, opt) 56 } 57 } 58 switch ctx.Service() { 59 case "erda.infra.example-client": 60 return p.client 61 case "erda.infra.example.GreeterService": 62 return &greeterServiceWrapper{client: p.client.GreeterService(), opts: opts} 63 case "erda.infra.example.GreeterService.client": 64 return p.client.GreeterService() 65 case "erda.infra.example.UserService": 66 return &userServiceWrapper{client: p.client.UserService(), opts: opts} 67 case "erda.infra.example.UserService.client": 68 return p.client.UserService() 69 } 70 switch ctx.Type() { 71 case clientsType: 72 return p.client 73 case greeterServiceClientType: 74 return p.client.GreeterService() 75 case greeterServiceServerType: 76 return &greeterServiceWrapper{client: p.client.GreeterService(), opts: opts} 77 case userServiceClientType: 78 return p.client.UserService() 79 case userServiceServerType: 80 return &userServiceWrapper{client: p.client.UserService(), opts: opts} 81 } 82 return p 83 } 84 85 func init() { 86 servicehub.Register("erda.infra.example-client", &servicehub.Spec{ 87 Services: []string{ 88 "erda.infra.example.GreeterService", 89 "erda.infra.example.UserService", 90 "erda.infra.example-client", 91 }, 92 Types: []reflect.Type{ 93 clientsType, 94 // client types 95 greeterServiceClientType, 96 userServiceClientType, 97 // server types 98 greeterServiceServerType, 99 userServiceServerType, 100 }, 101 OptionalDependencies: dependencies, 102 Creator: func() servicehub.Provider { 103 return &provider{} 104 }, 105 }) 106 }