openapi: 3.0.3
info:
  version: 0.1.0
  title: Schemata for command instructions
servers: []
paths: {}
components:
  schemas:
    # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    # Commands
    # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Commands:
      description: |-
        List of commands to test algorithms/datastructures.
      type: array
      items:
        $ref: "#/components/schemas/Command"
      default: []
    # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    # Command
    # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Command:
      description: |-
        Instructions for command to call
      required:
        - name
      properties: &ref_command_properties
        name:
          $ref: '#/components/schemas/EnumAlgorithmNames'
      additionalProperties: true
    # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    # Command - Algorithm: Tarjan
    # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    CommandTarjan:
      description: |-
        Instructions for execution of Tarjan-Algorithm
      type: object
      required:
        - name
        - nodes
        - edges
      properties:
        <<: *ref_command_properties
        nodes:
          type: array
        edges:
          type: array
          items:
            # $ref: '#/components/schemas/Edge'
            type: array
            minItems: 2
            maxItems: 2
    # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    # Command - Algorithm: TSP
    # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    CommandTsp:
      description: |-
        Instructions for execution of TSP-Algorithm
      type: object
      required:
        - name
        - optimise
        - dist
      properties:
        <<: *ref_command_properties
        dist:
          type: array
          items:
            type: array
            items:
              type: number
        optimise:
          $ref: '#/components/schemas/EnumTSPOptimise'
    # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    # Command - Algorithm: Hirschberg
    # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    CommandHirschberg:
      description: |-
        Instructions for execution of Hirschberg-Algorithm
      type: object
      required:
        - name
        - word1
        - word2
      properties:
        <<: *ref_command_properties
        word1:
          description: Word that gets placed vertically in algorithm.
          type: string
        word2:
          description: Word that gets placed horizontally in algorithm
          type: string
        once:
          type: boolean
          default: false
    # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    # Enum Algorithm Names
    # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    EnumAlgorithmNames:
      description: |-
        Enumeration of possible algorithm options.
      type: string
      enum:
        - TARJAN
        - TSP
        - HIRSCHBERG
    # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    # Enum TSP - Optimise Mode
    # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    EnumTSPOptimise:
      description: |-
        Enumeration of optimisation options for TSP
      type: string
      enum:
        - MIN
        - MAX