{
    "Comment": "Asset Transcoder State Machine",
    "StartAt": "Acknowledge",
    "States": {
      "Acknowledge": {
        "Type": "Task",
        "Resource": "${acknowledge_lambda_arn}",
        "Retry": [
          {
            "ErrorEquals": ["States.ALL"],
            "IntervalSeconds": 1,
            "MaxAttempts": 3
          }
        ],
        "Next": "EncodingRoute"
      },
      "EncodingRoute": {
        "Type": "Task",
        "Resource": "${encoding_route_lambda_arn}",
        "Retry": [
          {
            "ErrorEquals": ["States.ALL"],
            "IntervalSeconds": 1,
            "MaxAttempts": 3
          }
        ],
        "Next": "ChoiceTranscoding"
      },
      "ChoiceTranscoding": {
        "Type": "Choice",
        "Choices": [
          {
            "Variable": "$.transcoding_type",
            "StringEquals": "audio",
            "Next": "AudioValidation"
          },
          {
            "Variable": "$.transcoding_type",
            "StringEquals": "image",
            "Next": "ImageValidation"
          }
        ],
        "Default": "UnknownTranscodingType"
      },
      "UnknownTranscodingType": {
        "Type": "Fail",
        "Cause": "Unknown transcoding type."
      },
      "AudioValidation": {
        "Type": "Task",
        "Resource": "${audio_validation_lambda_arn}",
        "Retry": [
          {
            "ErrorEquals": ["InvalidAudioError", "InvalidAudioChannels"],
            "MaxAttempts": 0
          },
          {
            "ErrorEquals": ["States.ALL"],
            "IntervalSeconds": 1,
            "MaxAttempts": 3
          }
        ],
        "Next": "AudioWaveform"
      },
      "AudioWaveform": {
        "Type": "Task",
        "Resource": "${audio_waveform_lambda_arn}",
        "Retry": [
          {
            "ErrorEquals": ["States.ALL"],
            "IntervalSeconds": 1,
            "MaxAttempts": 3
          }
        ],
        "End": true
      },
      "ImageValidation": {
        "Type": "Task",
        "Resource": "${image_validation_lambda_arn}",
        "Retry": [
          {
            "ErrorEquals": ["InvalidImageError", "InvalidImageColor", "InvalidImageDimensions"],
            "MaxAttempts": 0
          },
          {
            "ErrorEquals": ["States.ALL"],
            "IntervalSeconds": 1,
            "MaxAttempts": 3
          }
        ],
        "Next": "ImageEncoding"
      },
      "ImageEncoding": {
        "Type": "Task",
        "Resource": "${image_encoding_lambda_arn}",
        "Retry": [
          {
            "ErrorEquals": ["States.ALL"],
            "IntervalSeconds": 1,
            "MaxAttempts": 3
          }
        ],
        "End": true
      }
    }
  }
