gitee.com/sasukebo/go-micro/v4@v4.7.1/registry/memory_util.go (about)

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