go-micro.dev/v5@v5.12.0/registry/nats/nats_util.go (about)

     1  package nats
     2  
     3  import "go-micro.dev/v5/registry"
     4  
     5  func cp(current []*registry.Service) []*registry.Service {
     6  	var services []*registry.Service
     7  
     8  	for _, service := range current {
     9  		// copy service
    10  		s := new(registry.Service)
    11  		*s = *service
    12  
    13  		// copy nodes
    14  		var nodes []*registry.Node
    15  		for _, node := range service.Nodes {
    16  			n := new(registry.Node)
    17  			*n = *node
    18  			nodes = append(nodes, n)
    19  		}
    20  		s.Nodes = nodes
    21  
    22  		// copy endpoints
    23  		var eps []*registry.Endpoint
    24  		for _, ep := range service.Endpoints {
    25  			e := new(registry.Endpoint)
    26  			*e = *ep
    27  			eps = append(eps, e)
    28  		}
    29  		s.Endpoints = eps
    30  
    31  		// append service
    32  		services = append(services, s)
    33  	}
    34  
    35  	return services
    36  }
    37  
    38  func addNodes(old, neu []*registry.Node) []*registry.Node {
    39  	for _, n := range neu {
    40  		var seen bool
    41  		for i, o := range old {
    42  			if o.Id == n.Id {
    43  				seen = true
    44  				old[i] = n
    45  				break
    46  			}
    47  		}
    48  		if !seen {
    49  			old = append(old, n)
    50  		}
    51  	}
    52  	return old
    53  }
    54  
    55  func addServices(old, neu []*registry.Service) []*registry.Service {
    56  	for _, s := range neu {
    57  		var seen bool
    58  		for i, o := range old {
    59  			if o.Version == s.Version {
    60  				s.Nodes = addNodes(o.Nodes, s.Nodes)
    61  				seen = true
    62  				old[i] = s
    63  				break
    64  			}
    65  		}
    66  		if !seen {
    67  			old = append(old, s)
    68  		}
    69  	}
    70  	return old
    71  }
    72  
    73  func delNodes(old, del []*registry.Node) []*registry.Node {
    74  	var nodes []*registry.Node
    75  	for _, o := range old {
    76  		var rem bool
    77  		for _, n := range del {
    78  			if o.Id == n.Id {
    79  				rem = true
    80  				break
    81  			}
    82  		}
    83  		if !rem {
    84  			nodes = append(nodes, o)
    85  		}
    86  	}
    87  	return nodes
    88  }
    89  
    90  func delServices(old, del []*registry.Service) []*registry.Service {
    91  	var services []*registry.Service
    92  	for i, o := range old {
    93  		var rem bool
    94  		for _, s := range del {
    95  			if o.Version == s.Version {
    96  				old[i].Nodes = delNodes(o.Nodes, s.Nodes)
    97  				if len(old[i].Nodes) == 0 {
    98  					rem = true
    99  				}
   100  			}
   101  		}
   102  		if !rem {
   103  			services = append(services, o)
   104  		}
   105  	}
   106  	return services
   107  }