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  }