code: func normalizeElementOrder(patch, serverOnly, patchOrder, serverOrder []interface{}, mergeKey string, kind reflect.Kind) ([]interface{}, error) {
  	patch, err := normalizeSliceOrder(patch, patchOrder, mergeKey, kind)
  	if err != nil {
  		return nil, err
  	}
  	serverOnly, err = normalizeSliceOrder(serverOnly, serverOrder, mergeKey, kind)
  	if err != nil {
  		return nil, err
  	}
  	all := mergeSortedSlice(serverOnly, patch, serverOrder, mergeKey, kind)
  
  	return all, nil
  }
docs: // normalizeElementOrder sort `patch` list by `patchOrder` and sort `serverOnly` list by `serverOrder`.
  // Then it merges the 2 sorted lists.
  // It guarantee the relative order in the patch list and in the serverOnly list is kept.
  // `patch` is a list of items in the patch, and `serverOnly` is a list of items in the live object.
  // `patchOrder` is the order we want `patch` list to have and
  // `serverOrder` is the order we want `serverOnly` list to have.
  // kind is the kind of each item in the lists `patch` and `serverOnly`.