{
  "type": "record",
  "Aspect": {
    "name": "serviceDefinition"
  },
  "name": "ServiceDefinition",
  "namespace": "com.linkedin.pegasus2avro.service",
  "fields": [
    {
      "type": {
        "type": "enum",
        "symbolDocs": {
          "ASYNCAPI": " An AsyncAPI (event / streaming) document. ",
          "GRAPHQL_SDL": " A GraphQL Schema Definition Language document. ",
          "GRPC_PROTO": " A gRPC Protocol Buffers (.proto) service definition. ",
          "JSON_SCHEMA": " A raw JSON Schema document (e.g. an MCP server's tools/list payload). ",
          "OPENAPI": " An OpenAPI (v2/Swagger or v3) document. ",
          "OTHER": " Any other spec format not enumerated above. "
        },
        "name": "ServiceDefinitionFormat",
        "namespace": "com.linkedin.pegasus2avro.service",
        "symbols": [
          "OPENAPI",
          "GRAPHQL_SDL",
          "GRPC_PROTO",
          "ASYNCAPI",
          "JSON_SCHEMA",
          "OTHER"
        ]
      },
      "name": "format",
      "doc": "The spec format, so consumers know how to parse and render `rawSpec`."
    },
    {
      "type": {
        "type": "record",
        "name": "LargeString",
        "namespace": "com.linkedin.pegasus2avro.common",
        "fields": [
          {
            "type": "string",
            "name": "blob",
            "doc": " When compression = NONE, the raw UTF-8 text. Otherwise base64(codec(utf8(text))) \u2014 base64 keeps it JSON-safe. "
          },
          {
            "type": {
              "type": "enum",
              "name": "CompressionType",
              "namespace": "com.linkedin.pegasus2avro.common",
              "symbols": [
                "NONE",
                "GZIP"
              ]
            },
            "name": "compression",
            "default": "NONE",
            "doc": " Codec applied to `blob`. "
          },
          {
            "type": [
              "null",
              "long"
            ],
            "name": "uncompressedSize",
            "default": null,
            "doc": " Byte length of the original (decompressed) UTF-8 text \u2014 for display/budgeting without decoding. "
          }
        ],
        "doc": "A string whose stored form may be compressed, so large text (API specs,\nschemas, docs) can live in an aspect without breaching the aspect-size limit.\nThe logical value is always the decompressed UTF-8 text; `compression` tells\nconsumers how to decode `blob`. NOTE: never mark a LargeString field\n@Searchable \u2014 a compressed blob cannot be indexed (enforced at model load)."
      },
      "name": "rawSpec",
      "doc": "The entire spec document, verbatim (the source of truth). Rendered\nread-only on the Service profile's Definition tab. Stored as a LargeString so\nlarge specs (full OpenAPI docs, schemas) compress under the aspect-size\nlimit; readers get the decompressed text (decoded server-side in the\nGraphQL mapper)."
    },
    {
      "type": [
        "null",
        "string"
      ],
      "name": "version",
      "default": null,
      "doc": "Spec version, e.g. the OpenAPI `info.version`. Optional."
    },
    {
      "type": [
        "null",
        "string"
      ],
      "name": "externalUrl",
      "default": null,
      "doc": "Link to the canonical source of the spec, if hosted elsewhere."
    }
  ],
  "doc": "The definition document for a Service \u2014 the full OpenAPI YAML, GraphQL\nSDL, gRPC .proto, or AsyncAPI document that describes everything the service\nexposes.\n\nThis is the source of truth for the service's interface. The operation-level\n`api` entities the service composes (the ServiceComposesApi relationship) are\nthe parsed projection of this document.\n\nKept as a separate aspect (not a field on ServiceProperties) because the\nrawSpec blob is large and only needed on the profile \u2014 ServiceProperties\nis fetched on every search card and header, this is not."
}