gitee.com/liuxuezhan/go-micro-v1.18.0@v1.0.0/router/service/table.go (about)

     1  package service
     2  
     3  import (
     4  	"context"
     5  
     6  	"gitee.com/liuxuezhan/go-micro-v1.18.0/client"
     7  	"gitee.com/liuxuezhan/go-micro-v1.18.0/router"
     8  	pb "gitee.com/liuxuezhan/go-micro-v1.18.0/router/proto"
     9  )
    10  
    11  type table struct {
    12  	table    pb.TableService
    13  	callOpts []client.CallOption
    14  }
    15  
    16  // Create new route in the routing table
    17  func (t *table) Create(r router.Route) error {
    18  	route := &pb.Route{
    19  		Service: r.Service,
    20  		Address: r.Address,
    21  		Gateway: r.Gateway,
    22  		Network: r.Network,
    23  		Link:    r.Link,
    24  		Metric:  r.Metric,
    25  	}
    26  
    27  	if _, err := t.table.Create(context.Background(), route, t.callOpts...); err != nil {
    28  		return err
    29  	}
    30  
    31  	return nil
    32  }
    33  
    34  // Delete deletes existing route from the routing table
    35  func (t *table) Delete(r router.Route) error {
    36  	route := &pb.Route{
    37  		Service: r.Service,
    38  		Address: r.Address,
    39  		Gateway: r.Gateway,
    40  		Network: r.Network,
    41  		Link:    r.Link,
    42  		Metric:  r.Metric,
    43  	}
    44  
    45  	if _, err := t.table.Delete(context.Background(), route, t.callOpts...); err != nil {
    46  		return err
    47  	}
    48  
    49  	return nil
    50  }
    51  
    52  // Update updates route in the routing table
    53  func (t *table) Update(r router.Route) error {
    54  	route := &pb.Route{
    55  		Service: r.Service,
    56  		Address: r.Address,
    57  		Gateway: r.Gateway,
    58  		Network: r.Network,
    59  		Link:    r.Link,
    60  		Metric:  r.Metric,
    61  	}
    62  
    63  	if _, err := t.table.Update(context.Background(), route, t.callOpts...); err != nil {
    64  		return err
    65  	}
    66  
    67  	return nil
    68  }
    69  
    70  // List returns the list of all routes in the table
    71  func (t *table) List() ([]router.Route, error) {
    72  	resp, err := t.table.List(context.Background(), &pb.Request{}, t.callOpts...)
    73  	if err != nil {
    74  		return nil, err
    75  	}
    76  
    77  	routes := make([]router.Route, len(resp.Routes))
    78  	for i, route := range resp.Routes {
    79  		routes[i] = router.Route{
    80  			Service: route.Service,
    81  			Address: route.Address,
    82  			Gateway: route.Gateway,
    83  			Network: route.Network,
    84  			Link:    route.Link,
    85  			Metric:  route.Metric,
    86  		}
    87  	}
    88  
    89  	return routes, nil
    90  }
    91  
    92  // Lookup looks up routes in the routing table and returns them
    93  func (t *table) Query(q ...router.QueryOption) ([]router.Route, error) {
    94  	query := router.NewQuery(q...)
    95  
    96  	// call the router
    97  	resp, err := t.table.Query(context.Background(), &pb.QueryRequest{
    98  		Query: &pb.Query{
    99  			Service: query.Service,
   100  			Gateway: query.Gateway,
   101  			Network: query.Network,
   102  		},
   103  	}, t.callOpts...)
   104  
   105  	// errored out
   106  	if err != nil {
   107  		return nil, err
   108  	}
   109  
   110  	routes := make([]router.Route, len(resp.Routes))
   111  	for i, route := range resp.Routes {
   112  		routes[i] = router.Route{
   113  			Service: route.Service,
   114  			Address: route.Address,
   115  			Gateway: route.Gateway,
   116  			Network: route.Network,
   117  			Link:    route.Link,
   118  			Metric:  route.Metric,
   119  		}
   120  	}
   121  
   122  	return routes, nil
   123  }