text: import API.schema
  
  """ Define reference structures used by api schemas.
  """
  
  
  def load():
      API.schema.ref(
          {
              "id": "Quaternion",
              "type": "array",
              "items": {
                  "type": "number"
              }
  
          }
      )
  
      API.schema.ref(
          {
              "id": "AudioSourceName",
              "type": "string",
              "description": "An audio source name"
          }
      )
  
      API.schema.ref(
          {
              "id": "AudioSourceLayout",
              "type": "string",
              "description": "A layout to be used in conjonction with an audio source"
          }
      )
  
      API.schema.ref(
          {
              "id": "StreamPreset",
              "type": "object",
              "properties": {
                  "name": {
                      "type": "string"
                  },
                  "filename": {
                      "type": "string"
                  },
                  "bitrate": {
                      "type": "integer"
                  },
                  "profile": {
                      "type": "string"
                  },
                  "pub_user": {
                      "type": "string"
                  },
                  "pub_passwd": {
                      "type": "string"
                  }
              },
              "required": ["name"]
          }
      )
  
      API.schema.ref(
          {
              "id": "DriveStatus",
              "description": "Represents a drive status",
              "type": "string",
              "enum": ["NoDeviceDetected", "InvalidDevice", "DeviceNotCompatible", "DeviceReadOnly", "DeviceOk",
                       "DeviceRemovable", "NotEnoughMemory"]
          }
      )
  
      API.schema.ref(
          {
              "id": "Drive",
              "type": "object",
              "properties": {
                  "warning_cluster_size": {
                      "type": "boolean"
                  },
                  "warning_disk_full": {
                      "type": "boolean"
                  },
                  "free_mb": {
                      "type": ["integer", "null"]
                  },
                  "total_mb": {
                      "type": ["integer", "null"]
                  },
                  "state": {
                      "$ref": "DriveStatus"
                  }
              },
  
          }
      )
  
      # Messages
  
      API.schema.ref(
          {
              "id": "Error",
              "type": "object",
              "properties": {
                  "code": {
                      "type": "string"
                  },
                  "message": {
                      "type": ["string", "null"]
                  },
                  "time": {
                      "type": "integer"
                  },
                  "id": {
                      "type": "integer"
                  }
              }
          }
      )
  
      API.schema.ref(
          {
              "id": "Event",
              "type": "object",
              "properties": {
                  "name": {
                      "type": "string"
                  },
                  "payload": {
                      "type": ["object", "null"]
                  }
              }
          }
      )
  
      API.schema.ref(
          {
              "id": "Message",
              "type": "object",
              "properties": {
                  "event": {
                      "$ref": "Event"
                  },
                  "error": {
                      "$ref": "Error"
                  }
              }
          }
      )
  
      # Status
  
      API.schema.ref(
          {
              "id": "OutputStatus",
              "description": "Represents the status of an output (stream or record)",
              "type": "string",
              "enum": ["Stopped", "Starting", "Started", "Retrying", "Stopping"]
          }
      )
  
      API.schema.ref(
          {
              "id": "NetworkStatus",
              "description": "Represents the network (wifi / eth) status",
              "type": "string",
              "enum": ["Connected", "Disconnected"]
          }
      )
  
      API.schema.ref(
          {
              "id": "CameraStatus",
              "description": "Represents the camera status",
              "type": "string",
              "enum": ["Initial",
                       "Discovering",
                       "Connecting",
                       "CheckingFirmware",
                       "FirmwareIncompatible_MustBeUpgraded",
                       "FirmwareCompatible_CanBeUpgraded",
                       "FirmwareIncompatible_CannotBeDowngraded",
                       "FirmwareCompatible_CannotBeDowngraded",
                       "UpdatingFirmware",
                       "FetchingCalibration",
                       "StartingStreams",
                       "Connected"]
          }
      )
  
  
      API.schema.ref(
          {
              "id": "SocialNetworkStatus",
              "description": "Represents the status of a social network",
              "type": "string",
              "enum": ["Initial",
                    "CheckingLink",
                    "Linking",
                    "Disconnected",
                    "Connected"]
          }
      )
  
  