package pbservice import ( "strings" ) // UniqueID returns a unique identifier for this CheckServiceNode, which includes // the node name, service namespace, and service ID. // // The returned ID uses slashes to separate the identifiers, however the node name // may also contain a slash, so it is not possible to parse this identifier to // retrieve its constituent parts. // // This function is similar to structs.UniqueID, however at this time no guarantees // are made that it will remain the same. func (m *CheckServiceNode) UniqueID() string { if m == nil { return "" } builder := new(strings.Builder) switch { case m.Node != nil: builder.WriteString(m.Node.Partition + "/") builder.WriteString(m.Node.PeerName + "/") case m.Service != nil: partition := "" if m.Service.EnterpriseMeta != nil { partition = m.Service.EnterpriseMeta.Partition } builder.WriteString(partition + "/") builder.WriteString(m.Service.PeerName + "/") } if m.Node != nil { builder.WriteString(m.Node.Node + "/") } if m.Service != nil { namespace := "" if m.Service.EnterpriseMeta != nil { namespace = m.Service.EnterpriseMeta.Namespace } builder.WriteString(namespace + "/") builder.WriteString(m.Service.ID) } return builder.String() }