code: func DecodeToNode(labels map[string]string, filters ...string) (*Node, error) {
  	var sortedKeys []string
  	for key := range labels {
  		if len(filters) == 0 {
  			sortedKeys = append(sortedKeys, key)
  			continue
  		}
  
  		for _, filter := range filters {
  			if len(key) >= len(filter) && strings.EqualFold(key[:len(filter)], filter) {
  				sortedKeys = append(sortedKeys, key)
  				continue
  			}
  		}
  	}
  	sort.Strings(sortedKeys)
  
  	labelRoot := "traefik"
  
  	var node *Node
  	for i, key := range sortedKeys {
  		split := strings.Split(key, ".")
  
  		if split[0] != labelRoot {
  			// TODO (@ldez): error or continue
  			return nil, fmt.Errorf("invalid label root %s", split[0])
  		}
  
  		labelRoot = split[0]
  
  		if i == 0 {
  			node = &Node{}
  		}
  		decodeToNode(node, split, labels[key])
  	}
  
  	return node, nil
  }
docs: // DecodeToNode Converts the labels to a node.
  // labels -> nodes