code: @SuppressWarnings("rawtypes")
      public static final SerIterator grid(
              final Grid<?> grid, final Class<?> declaredType,
              final Class<?> valueType, final List<Class<?>> valueTypeTypes) {
          return new SerIterator() {
              private final Iterator it = grid.cells().iterator();
              private Grid.Cell current;
  
              @Override
              public String metaTypeName() {
                  return "Grid";
              }
              @Override
              public boolean metaTypeRequired() {
                  return Grid.class.isAssignableFrom(declaredType) == false;
              }
              @Override
              public SerCategory category() {
                  return SerCategory.GRID;
              }
              @Override
              public int dimensionSize(int dimension) {
                  return (dimension == 0 ? grid.rowCount() : grid.columnCount());
              }
              @Override
              public int size() {
                  return grid.size();
              }
              @Override
              public boolean hasNext() {
                  return it.hasNext();
              }
              @Override
              public void next() {
                  current = (Grid.Cell) it.next();
              }
              @Override
              public Class<?> keyType() {
                  return Integer.class;
              }
              @Override
              public Object key() {
                  return current.getRow();
              }
              @Override
              public Class<?> columnType() {
                  return Integer.class;
              }
              @Override
              public Object column() {
                  return current.getColumn();
              }
              @Override
              public Class<?> valueType() {
                  return valueType;
              }
              @Override
              public Object value() {
                  return current.getValue();
              }
              @Override
              public Object value(int row, int column) {
                  return grid.get(row, column);
              }
              @Override
              public List<Class<?>> valueTypeTypes() {
                  return valueTypeTypes;
              }
          };
      }
docs: Gets an iterator wrapper for {@code Grid}.
  
  @param grid  the collection, not null
  @param declaredType  the declared type, not null
  @param valueType  the value type, not null
  @param valueTypeTypes  the generic parameters of the value type
  @return the iterator, not null