{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://api-evangelist.github.io/webflux/json-schema/webflux-router-function-schema.json",
  "title": "Spring WebFlux Router Function Configuration",
  "description": "JSON Schema representing the structure of a Spring WebFlux RouterFunction route configuration, describing functional endpoints.",
  "type": "object",
  "properties": {
    "routes": {
      "type": "array",
      "description": "List of route definitions composed into a RouterFunction",
      "items": {
        "type": "object",
        "properties": {
          "method": {
            "type": "string",
            "enum": ["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"],
            "description": "HTTP method predicate"
          },
          "path": {
            "type": "string",
            "description": "URI path pattern (supports template variables like {id})"
          },
          "contentType": {
            "type": "string",
            "description": "Content-Type request predicate (e.g., application/json)"
          },
          "accept": {
            "type": "string",
            "description": "Accept header predicate"
          },
          "handler": {
            "type": "string",
            "description": "Handler function bean name or class reference"
          },
          "filters": {
            "type": "array",
            "items": {"type": "string"},
            "description": "List of handler filter functions applied to this route"
          },
          "attributes": {
            "type": "object",
            "additionalProperties": true,
            "description": "Custom attributes on the route for documentation or metadata"
          }
        },
        "required": ["method", "path", "handler"]
      }
    },
    "basePath": {
      "type": "string",
      "description": "Common base path prefix for all routes in this router"
    },
    "filters": {
      "type": "array",
      "items": {"type": "string"},
      "description": "Global filters applied to all routes in this router"
    }
  },
  "required": ["routes"]
}
