private static boolean isValidDefault()

in lang/java/avro/src/main/java/org/apache/avro/Schema.java [1751:1798]


  private static boolean isValidDefault(Schema schema, JsonNode defaultValue) {
    if (defaultValue == null)
      return false;
    switch (schema.getType()) {
    case STRING:
    case BYTES:
    case ENUM:
    case FIXED:
      return defaultValue.isTextual();
    case INT:
      return defaultValue.isIntegralNumber() && defaultValue.canConvertToInt();
    case LONG:
      return defaultValue.isIntegralNumber() && defaultValue.canConvertToLong();
    case FLOAT:
    case DOUBLE:
      return defaultValue.isNumber();
    case BOOLEAN:
      return defaultValue.isBoolean();
    case NULL:
      return defaultValue.isNull();
    case ARRAY:
      if (!defaultValue.isArray())
        return false;
      for (JsonNode element : defaultValue)
        if (!isValidDefault(schema.getElementType(), element))
          return false;
      return true;
    case MAP:
      if (!defaultValue.isObject())
        return false;
      for (JsonNode value : defaultValue)
        if (!isValidDefault(schema.getValueType(), value))
          return false;
      return true;
    case UNION: // union default: any branch
      return schema.getTypes().stream().anyMatch((Schema s) -> isValidValue(s, defaultValue));
    case RECORD:
      if (!defaultValue.isObject())
        return false;
      for (Field field : schema.getFields())
        if (!isValidValue(field.schema(),
            defaultValue.has(field.name()) ? defaultValue.get(field.name()) : field.defaultValue()))
          return false;
      return true;
    default:
      return false;
    }
  }