* logger: add WithDedupKeys option Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
		
			
				
	
	
		
			40 lines
		
	
	
		
			739 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			739 B
		
	
	
	
		
			Go
		
	
	
	
	
	
package sort
 | 
						|
 | 
						|
import (
 | 
						|
	"sort"
 | 
						|
)
 | 
						|
 | 
						|
// sort labels alphabeticaly by label name
 | 
						|
type byKey []interface{}
 | 
						|
 | 
						|
func (k byKey) Len() int           { return len(k) / 2 }
 | 
						|
func (k byKey) Less(i, j int) bool { return k[i*2].(string) < k[j*2].(string) }
 | 
						|
func (k byKey) Swap(i, j int) {
 | 
						|
	k[i*2], k[j*2] = k[j*2], k[i*2]
 | 
						|
	k[i*2+1], k[j*2+1] = k[j*2+1], k[i*2+1]
 | 
						|
}
 | 
						|
 | 
						|
func Uniq(labels []interface{}) []interface{} {
 | 
						|
	if len(labels)%2 == 1 {
 | 
						|
		labels = labels[:len(labels)-1]
 | 
						|
	}
 | 
						|
 | 
						|
	if len(labels) > 2 {
 | 
						|
		sort.Sort(byKey(labels))
 | 
						|
 | 
						|
		idx := 0
 | 
						|
		for {
 | 
						|
			if labels[idx] == labels[idx+2] {
 | 
						|
				copy(labels[idx:], labels[idx+2:])
 | 
						|
				labels = labels[:len(labels)-2]
 | 
						|
			} else {
 | 
						|
				idx += 2
 | 
						|
			}
 | 
						|
			if idx+2 >= len(labels) {
 | 
						|
				break
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return labels
 | 
						|
}
 |