toJson method

  1. @override
Map<String, Object> toJson()
override

Convert to standard JSON JSONSchema object.

Reference: https://ai.google.dev/api/caching#FunctionDeclaration

Implementation

@override
Map<String, Object> toJson() => {
      if (type != SchemaType.anyOf && type != SchemaType.ref)
        'type': nullable == true ? [type.name, 'null'] : type.name,
      if (ref case final ref?) r'$ref': ref,
      if (defs case final defs?)
        r'$defs': {
          for (final MapEntry(:key, :value) in defs.entries)
            key: value.toJson()
        },
      if (format case final format?) 'format': format,
      if (description case final description?) 'description': description,
      if (title case final title?) 'title': title,
      if (enumValues case final enumValues?) 'enum': enumValues,
      if (items case final items?) 'items': items.toJson(),
      if (minItems case final minItems?) 'minItems': minItems,
      if (maxItems case final maxItems?) 'maxItems': maxItems,
      if (minimum case final minimum?) 'minimum': minimum,
      if (maximum case final maximum?) 'maximum': maximum,
      if (properties case final properties?)
        'properties': {
          for (final MapEntry(:key, :value) in properties.entries)
            key: value.toJson()
        },
      // Calculate required properties based on optionalProperties
      if (properties != null)
        'required': optionalProperties != null
            ? properties!.keys
                .where((key) => !optionalProperties!.contains(key))
                .toList()
            : properties!.keys.toList(),
      if (anyOf case final anyOf?)
        'anyOf': anyOf.map((e) => e.toJson()).toList(),
    };