code: public SerIterable createIterable(SerIterable iterable) {
          List<Class<?>> valueTypeTypes = iterable.valueTypeTypes();
          if (valueTypeTypes.size() > 0) {
              Class<?> valueType = iterable.valueType();
              if (NavigableSet.class.isAssignableFrom(valueType)) {
                  return navigableSet(valueTypeTypes.get(0), EMPTY_VALUE_TYPES);
              }
              if (SortedSet.class.isAssignableFrom(valueType)) {
                  return sortedSet(valueTypeTypes.get(0), EMPTY_VALUE_TYPES);
              }
              if (Set.class.isAssignableFrom(valueType)) {
                  return set(valueTypeTypes.get(0), EMPTY_VALUE_TYPES);
              }
              if (Collection.class.isAssignableFrom(valueType)) {  // includes List
                  return list(valueTypeTypes.get(0), EMPTY_VALUE_TYPES);
              }
              if (NavigableMap.class.isAssignableFrom(valueType)) {
                  if (valueTypeTypes.size() == 2) {
                      return navigableMap(valueTypeTypes.get(0), valueTypeTypes.get(1), EMPTY_VALUE_TYPES);
                  }
                  return navigableMap(Object.class, Object.class, EMPTY_VALUE_TYPES);
              }
              if (SortedMap.class.isAssignableFrom(valueType)) {
                  if (valueTypeTypes.size() == 2) {
                      return sortedMap(valueTypeTypes.get(0), valueTypeTypes.get(1), EMPTY_VALUE_TYPES);
                  }
                  return sortedMap(Object.class, Object.class, EMPTY_VALUE_TYPES);
              }
              if (Map.class.isAssignableFrom(valueType)) {
                  if (valueTypeTypes.size() == 2) {
                      return map(valueTypeTypes.get(0), valueTypeTypes.get(1), EMPTY_VALUE_TYPES);
                  }
                  return map(Object.class, Object.class, EMPTY_VALUE_TYPES);
              }
              if (valueType.isArray()) {
                  if (valueType.getComponentType().isPrimitive()) {
                      return arrayPrimitive(valueType.getComponentType());
                  } else {
                      return array(valueType.getComponentType());
                  }
              }
          }
          return null;
      }
docs: Creates an iterator wrapper for a child where there are second level generic parameters.
  
  @param iterable  the parent iterable, not null
  @return the iterable, null if not a collection-like type