code: public static Value structArray(Type elementType, @Nullable Iterable<Struct> v) {
      if (v == null) {
        Preconditions.checkArgument(
            elementType.getCode() == Code.STRUCT,
            "Illegal call to create a NULL array-of-struct with a non-struct element type.");
        return new StructArrayImpl(elementType, null);
      }
      List<Struct> values = immutableCopyOf(v);
      for (Struct value : values) {
        if (value != null) {
          Preconditions.checkArgument(
              value.getType().equals(elementType),
              "Members of v must have type %s (found %s)",
              elementType,
              value.getType());
        }
      }
      return new StructArrayImpl(elementType, values);
    }
docs: Returns an {@code ARRAY<STRUCT<...>>} value.
  
  @param elementType
  @param v the source of element values. This may be {@code null} to produce a value for which
  {@code isNull()} is {@code true}. Individual elements may also be {@code null}.