gitee.com/liuxuezhan/go-micro-v1.18.0@v1.0.0/registry/memory/util.go (about)

     1  package memory
     2  
     3  import (
     4  	"time"
     5  
     6  	"gitee.com/liuxuezhan/go-micro-v1.18.0/registry"
     7  )
     8  
     9  func serviceToRecord(s *registry.Service, ttl time.Duration) *record {
    10  	metadata := make(map[string]string)
    11  	for k, v := range s.Metadata {
    12  		metadata[k] = v
    13  	}
    14  
    15  	nodes := make(map[string]*node)
    16  	for _, n := range s.Nodes {
    17  		nodes[n.Id] = &node{
    18  			Node:     n,
    19  			TTL:      ttl,
    20  			LastSeen: time.Now(),
    21  		}
    22  	}
    23  
    24  	endpoints := make([]*registry.Endpoint, len(s.Endpoints))
    25  	for i, e := range s.Endpoints {
    26  		endpoints[i] = e
    27  	}
    28  
    29  	return &record{
    30  		Name:      s.Name,
    31  		Version:   s.Version,
    32  		Metadata:  metadata,
    33  		Nodes:     nodes,
    34  		Endpoints: endpoints,
    35  	}
    36  }
    37  
    38  func recordToService(r *record) *registry.Service {
    39  	metadata := make(map[string]string)
    40  	for k, v := range r.Metadata {
    41  		metadata[k] = v
    42  	}
    43  
    44  	endpoints := make([]*registry.Endpoint, len(r.Endpoints))
    45  	for i, e := range r.Endpoints {
    46  		request := new(registry.Value)
    47  		if e.Request != nil {
    48  			*request = *e.Request
    49  		}
    50  		response := new(registry.Value)
    51  		if e.Response != nil {
    52  			*response = *e.Response
    53  		}
    54  
    55  		metadata := make(map[string]string)
    56  		for k, v := range e.Metadata {
    57  			metadata[k] = v
    58  		}
    59  
    60  		endpoints[i] = &registry.Endpoint{
    61  			Name:     e.Name,
    62  			Request:  request,
    63  			Response: response,
    64  			Metadata: metadata,
    65  		}
    66  	}
    67  
    68  	nodes := make([]*registry.Node, len(r.Nodes))
    69  	i := 0
    70  	for _, n := range r.Nodes {
    71  		metadata := make(map[string]string)
    72  		for k, v := range n.Metadata {
    73  			metadata[k] = v
    74  		}
    75  
    76  		nodes[i] = &registry.Node{
    77  			Id:       n.Id,
    78  			Address:  n.Address,
    79  			Metadata: metadata,
    80  		}
    81  		i++
    82  	}
    83  
    84  	return &registry.Service{
    85  		Name:      r.Name,
    86  		Version:   r.Version,
    87  		Metadata:  metadata,
    88  		Endpoints: endpoints,
    89  		Nodes:     nodes,
    90  	}
    91  }