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 }