code: func partitionMapsByPresentInList(original, partitionBy []interface{}, mergeKey string) ([]interface{}, []interface{}, error) {
  	patch := make([]interface{}, 0, len(original))
  	serverOnly := make([]interface{}, 0, len(original))
  	for _, v := range original {
  		typedV, ok := v.(map[string]interface{})
  		if !ok {
  			return nil, nil, mergepatch.ErrBadArgType(typedV, v)
  		}
  		mergeKeyValue, foundMergeKey := typedV[mergeKey]
  		if !foundMergeKey {
  			return nil, nil, mergepatch.ErrNoMergeKey(typedV, mergeKey)
  		}
  		_, _, found, err := findMapInSliceBasedOnKeyValue(partitionBy, mergeKey, mergeKeyValue)
  		if err != nil {
  			return nil, nil, err
  		}
  		if !found {
  			serverOnly = append(serverOnly, v)
  		} else {
  			patch = append(patch, v)
  		}
  	}
  	return patch, serverOnly, nil
  }
docs: // partitionMapsByPresentInList partitions elements into 2 slices, the first containing items present in partitionBy, the other not.