<?php return [
  'service' => [
    'actions' => [
      'CreateVault' => [
        'request' => [
          'operation' => 'CreateVault',
          'params' => [
            [
              'target' => 'accountId',
              'source' => 'string',
              'value' => '-',
            ],
          ],
        ],
        'resource' => [
          'type' => 'Vault',
          'identifiers' => [
            [
              'target' => 'AccountId',
              'source' => 'requestParameter',
              'path' => 'accountId',
            ],
            [
              'target' => 'Name',
              'source' => 'requestParameter',
              'path' => 'vaultName',
            ],
          ],
        ],
      ],
    ],
    'has' => [
      'Account' => [
        'resource' => [
          'type' => 'Account',
          'identifiers' => [
            [
              'target' => 'Id',
              'source' => 'input',
            ],
          ],
        ],
      ],
    ],
    'hasMany' => [
      'Vaults' => [
        'request' => [
          'operation' => 'ListVaults',
          'params' => [
            [
              'target' => 'accountId',
              'source' => 'string',
              'value' => '-',
            ],
          ],
        ],
        'resource' => [
          'type' => 'Vault',
          'identifiers' => [
            [
              'target' => 'AccountId',
              'source' => 'requestParameter',
              'path' => 'accountId',
            ],
            [
              'target' => 'Name',
              'source' => 'response',
              'path' => 'VaultList[].VaultName',
            ],
          ],
          'path' => 'VaultList[]',
        ],
      ],
    ],
  ],
  'resources' => [
    'Account' => [
      'identifiers' => [
        [
          'name' => 'Id',
        ],
      ],
      'actions' => [
        'CreateVault' => [
          'request' => [
            'operation' => 'CreateVault',
            'params' => [
              [
                'target' => 'accountId',
                'source' => 'identifier',
                'name' => 'Id',
              ],
            ],
          ],
          'resource' => [
            'type' => 'Vault',
            'identifiers' => [
              [
                'target' => 'AccountId',
                'source' => 'identifier',
                'name' => 'Id',
              ],
              [
                'target' => 'Name',
                'source' => 'requestParameter',
                'path' => 'vaultName',
              ],
            ],
          ],
        ],
      ],
      'has' => [
        'Vault' => [
          'resource' => [
            'type' => 'Vault',
            'identifiers' => [
              [
                'target' => 'AccountId',
                'source' => 'identifier',
                'name' => 'Id',
              ],
              [
                'target' => 'Name',
                'source' => 'input',
              ],
            ],
          ],
        ],
      ],
      'hasMany' => [
        'Vaults' => [
          'request' => [
            'operation' => 'ListVaults',
            'params' => [
              [
                'target' => 'accountId',
                'source' => 'identifier',
                'name' => 'Id',
              ],
            ],
          ],
          'resource' => [
            'type' => 'Vault',
            'identifiers' => [
              [
                'target' => 'AccountId',
                'source' => 'identifier',
                'name' => 'Id',
              ],
              [
                'target' => 'Name',
                'source' => 'response',
                'path' => 'VaultList[].VaultName',
              ],
            ],
            'path' => 'VaultList[]',
          ],
        ],
      ],
    ],
    'Archive' => [
      'identifiers' => [
        [
          'name' => 'AccountId',
        ],
        [
          'name' => 'VaultName',
        ],
        [
          'name' => 'Id',
        ],
      ],
      'actions' => [
        'Delete' => [
          'request' => [
            'operation' => 'DeleteArchive',
            'params' => [
              [
                'target' => 'accountId',
                'source' => 'identifier',
                'name' => 'AccountId',
              ],
              [
                'target' => 'vaultName',
                'source' => 'identifier',
                'name' => 'VaultName',
              ],
              [
                'target' => 'archiveId',
                'source' => 'identifier',
                'name' => 'Id',
              ],
            ],
          ],
        ],
        'InitiateArchiveRetrieval' => [
          'request' => [
            'operation' => 'InitiateJob',
            'params' => [
              [
                'target' => 'vaultName',
                'source' => 'identifier',
                'name' => 'VaultName',
              ],
              [
                'target' => 'accountId',
                'source' => 'identifier',
                'name' => 'AccountId',
              ],
              [
                'target' => 'jobParameters.Type',
                'source' => 'string',
                'value' => 'archive-retrieval',
              ],
              [
                'target' => 'jobParameters.ArchiveId',
                'source' => 'identifier',
                'name' => 'Id',
              ],
            ],
          ],
          'resource' => [
            'type' => 'Job',
            'identifiers' => [
              [
                'target' => 'Id',
                'source' => 'response',
                'path' => 'jobId',
              ],
              [
                'target' => 'AccountId',
                'source' => 'identifier',
                'name' => 'AccountId',
              ],
              [
                'target' => 'VaultName',
                'source' => 'identifier',
                'name' => 'VaultName',
              ],
            ],
          ],
        ],
      ],
      'has' => [
        'Vault' => [
          'resource' => [
            'type' => 'Vault',
            'identifiers' => [
              [
                'target' => 'AccountId',
                'source' => 'identifier',
                'name' => 'AccountId',
              ],
              [
                'target' => 'Name',
                'source' => 'identifier',
                'name' => 'VaultName',
              ],
            ],
          ],
        ],
      ],
    ],
    'Job' => [
      'identifiers' => [
        [
          'name' => 'AccountId',
        ],
        [
          'name' => 'VaultName',
        ],
        [
          'name' => 'Id',
          'memberName' => 'JobId',
        ],
      ],
      'shape' => 'GlacierJobDescription',
      'load' => [
        'request' => [
          'operation' => 'DescribeJob',
          'params' => [
            [
              'target' => 'accountId',
              'source' => 'identifier',
              'name' => 'AccountId',
            ],
            [
              'target' => 'vaultName',
              'source' => 'identifier',
              'name' => 'VaultName',
            ],
            [
              'target' => 'jobId',
              'source' => 'identifier',
              'name' => 'Id',
            ],
          ],
        ],
        'path' => '@',
      ],
      'actions' => [
        'GetOutput' => [
          'request' => [
            'operation' => 'GetJobOutput',
            'params' => [
              [
                'target' => 'accountId',
                'source' => 'identifier',
                'name' => 'AccountId',
              ],
              [
                'target' => 'vaultName',
                'source' => 'identifier',
                'name' => 'VaultName',
              ],
              [
                'target' => 'jobId',
                'source' => 'identifier',
                'name' => 'Id',
              ],
            ],
          ],
        ],
      ],
      'has' => [
        'Vault' => [
          'resource' => [
            'type' => 'Vault',
            'identifiers' => [
              [
                'target' => 'AccountId',
                'source' => 'identifier',
                'name' => 'AccountId',
              ],
              [
                'target' => 'Name',
                'source' => 'identifier',
                'name' => 'VaultName',
              ],
            ],
          ],
        ],
      ],
    ],
    'MultipartUpload' => [
      'identifiers' => [
        [
          'name' => 'AccountId',
        ],
        [
          'name' => 'VaultName',
        ],
        [
          'name' => 'Id',
          'memberName' => 'MultipartUploadId',
        ],
      ],
      'shape' => 'UploadListElement',
      'actions' => [
        'Abort' => [
          'request' => [
            'operation' => 'AbortMultipartUpload',
            'params' => [
              [
                'target' => 'accountId',
                'source' => 'identifier',
                'name' => 'AccountId',
              ],
              [
                'target' => 'vaultName',
                'source' => 'identifier',
                'name' => 'VaultName',
              ],
              [
                'target' => 'uploadId',
                'source' => 'identifier',
                'name' => 'Id',
              ],
            ],
          ],
        ],
        'Complete' => [
          'request' => [
            'operation' => 'CompleteMultipartUpload',
            'params' => [
              [
                'target' => 'accountId',
                'source' => 'identifier',
                'name' => 'AccountId',
              ],
              [
                'target' => 'vaultName',
                'source' => 'identifier',
                'name' => 'VaultName',
              ],
              [
                'target' => 'uploadId',
                'source' => 'identifier',
                'name' => 'Id',
              ],
            ],
          ],
        ],
        'Parts' => [
          'request' => [
            'operation' => 'ListParts',
            'params' => [
              [
                'target' => 'accountId',
                'source' => 'identifier',
                'name' => 'AccountId',
              ],
              [
                'target' => 'vaultName',
                'source' => 'identifier',
                'name' => 'VaultName',
              ],
              [
                'target' => 'uploadId',
                'source' => 'identifier',
                'name' => 'Id',
              ],
            ],
          ],
        ],
        'UploadPart' => [
          'request' => [
            'operation' => 'UploadMultipartPart',
            'params' => [
              [
                'target' => 'accountId',
                'source' => 'identifier',
                'name' => 'AccountId',
              ],
              [
                'target' => 'vaultName',
                'source' => 'identifier',
                'name' => 'VaultName',
              ],
              [
                'target' => 'uploadId',
                'source' => 'identifier',
                'name' => 'Id',
              ],
            ],
          ],
        ],
      ],
      'has' => [
        'Vault' => [
          'resource' => [
            'type' => 'Vault',
            'identifiers' => [
              [
                'target' => 'AccountId',
                'source' => 'identifier',
                'name' => 'AccountId',
              ],
              [
                'target' => 'Name',
                'source' => 'identifier',
                'name' => 'VaultName',
              ],
            ],
          ],
        ],
      ],
    ],
    'Notification' => [
      'identifiers' => [
        [
          'name' => 'AccountId',
        ],
        [
          'name' => 'VaultName',
        ],
      ],
      'shape' => 'VaultNotificationConfig',
      'load' => [
        'request' => [
          'operation' => 'GetVaultNotifications',
          'params' => [
            [
              'target' => 'accountId',
              'source' => 'identifier',
              'name' => 'AccountId',
            ],
            [
              'target' => 'vaultName',
              'source' => 'identifier',
              'name' => 'VaultName',
            ],
          ],
        ],
        'path' => 'vaultNotificationConfig',
      ],
      'actions' => [
        'Delete' => [
          'request' => [
            'operation' => 'DeleteVaultNotifications',
            'params' => [
              [
                'target' => 'accountId',
                'source' => 'identifier',
                'name' => 'AccountId',
              ],
              [
                'target' => 'vaultName',
                'source' => 'identifier',
                'name' => 'VaultName',
              ],
            ],
          ],
        ],
        'Set' => [
          'request' => [
            'operation' => 'SetVaultNotifications',
            'params' => [
              [
                'target' => 'accountId',
                'source' => 'identifier',
                'name' => 'AccountId',
              ],
              [
                'target' => 'vaultName',
                'source' => 'identifier',
                'name' => 'VaultName',
              ],
            ],
          ],
        ],
      ],
      'has' => [
        'Vault' => [
          'resource' => [
            'type' => 'Vault',
            'identifiers' => [
              [
                'target' => 'AccountId',
                'source' => 'identifier',
                'name' => 'AccountId',
              ],
              [
                'target' => 'Name',
                'source' => 'identifier',
                'name' => 'VaultName',
              ],
            ],
          ],
        ],
      ],
    ],
    'Vault' => [
      'identifiers' => [
        [
          'name' => 'AccountId',
        ],
        [
          'name' => 'Name',
          'memberName' => 'VaultName',
        ],
      ],
      'shape' => 'DescribeVaultOutput',
      'load' => [
        'request' => [
          'operation' => 'DescribeVault',
          'params' => [
            [
              'target' => 'vaultName',
              'source' => 'identifier',
              'name' => 'Name',
            ],
            [
              'target' => 'accountId',
              'source' => 'identifier',
              'name' => 'AccountId',
            ],
          ],
        ],
        'path' => '@',
      ],
      'actions' => [
        'Create' => [
          'request' => [
            'operation' => 'CreateVault',
            'params' => [
              [
                'target' => 'vaultName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
              [
                'target' => 'accountId',
                'source' => 'identifier',
                'name' => 'AccountId',
              ],
            ],
          ],
        ],
        'Delete' => [
          'request' => [
            'operation' => 'DeleteVault',
            'params' => [
              [
                'target' => 'vaultName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
              [
                'target' => 'accountId',
                'source' => 'identifier',
                'name' => 'AccountId',
              ],
            ],
          ],
        ],
        'InitiateInventoryRetrieval' => [
          'request' => [
            'operation' => 'InitiateJob',
            'params' => [
              [
                'target' => 'vaultName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
              [
                'target' => 'accountId',
                'source' => 'identifier',
                'name' => 'AccountId',
              ],
              [
                'target' => 'jobParameters.Type',
                'source' => 'string',
                'value' => 'inventory-retrieval',
              ],
            ],
          ],
          'resource' => [
            'type' => 'Job',
            'identifiers' => [
              [
                'target' => 'Id',
                'source' => 'response',
                'path' => 'jobId',
              ],
              [
                'target' => 'AccountId',
                'source' => 'identifier',
                'name' => 'AccountId',
              ],
              [
                'target' => 'VaultName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
        ],
        'InitiateMultipartUpload' => [
          'request' => [
            'operation' => 'InitiateMultipartUpload',
            'params' => [
              [
                'target' => 'vaultName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
              [
                'target' => 'accountId',
                'source' => 'identifier',
                'name' => 'AccountId',
              ],
            ],
          ],
          'resource' => [
            'type' => 'MultipartUpload',
            'identifiers' => [
              [
                'target' => 'Id',
                'source' => 'response',
                'path' => 'uploadId',
              ],
              [
                'target' => 'AccountId',
                'source' => 'identifier',
                'name' => 'AccountId',
              ],
              [
                'target' => 'VaultName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
        ],
        'UploadArchive' => [
          'request' => [
            'operation' => 'UploadArchive',
            'params' => [
              [
                'target' => 'vaultName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
              [
                'target' => 'accountId',
                'source' => 'identifier',
                'name' => 'AccountId',
              ],
            ],
          ],
          'resource' => [
            'type' => 'Archive',
            'identifiers' => [
              [
                'target' => 'Id',
                'source' => 'response',
                'path' => 'archiveId',
              ],
              [
                'target' => 'AccountId',
                'source' => 'identifier',
                'name' => 'AccountId',
              ],
              [
                'target' => 'VaultName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
        ],
      ],
      'has' => [
        'Account' => [
          'resource' => [
            'type' => 'Account',
            'identifiers' => [
              [
                'target' => 'Id',
                'source' => 'identifier',
                'name' => 'AccountId',
              ],
            ],
          ],
        ],
        'Archive' => [
          'resource' => [
            'type' => 'Archive',
            'identifiers' => [
              [
                'target' => 'AccountId',
                'source' => 'identifier',
                'name' => 'AccountId',
              ],
              [
                'target' => 'VaultName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
              [
                'target' => 'Id',
                'source' => 'input',
              ],
            ],
          ],
        ],
        'Job' => [
          'resource' => [
            'type' => 'Job',
            'identifiers' => [
              [
                'target' => 'AccountId',
                'source' => 'identifier',
                'name' => 'AccountId',
              ],
              [
                'target' => 'VaultName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
              [
                'target' => 'Id',
                'source' => 'input',
              ],
            ],
          ],
        ],
        'MultipartUpload' => [
          'resource' => [
            'type' => 'MultipartUpload',
            'identifiers' => [
              [
                'target' => 'AccountId',
                'source' => 'identifier',
                'name' => 'AccountId',
              ],
              [
                'target' => 'VaultName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
              [
                'target' => 'Id',
                'source' => 'input',
              ],
            ],
          ],
        ],
        'Notification' => [
          'resource' => [
            'type' => 'Notification',
            'identifiers' => [
              [
                'target' => 'AccountId',
                'source' => 'identifier',
                'name' => 'AccountId',
              ],
              [
                'target' => 'VaultName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
        ],
      ],
      'hasMany' => [
        'CompletedJobs' => [
          'request' => [
            'operation' => 'ListJobs',
            'params' => [
              [
                'target' => 'accountId',
                'source' => 'identifier',
                'name' => 'AccountId',
              ],
              [
                'target' => 'vaultName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
              [
                'target' => 'completed',
                'source' => 'string',
                'value' => 'true',
              ],
            ],
          ],
          'resource' => [
            'type' => 'Job',
            'identifiers' => [
              [
                'target' => 'AccountId',
                'source' => 'identifier',
                'name' => 'AccountId',
              ],
              [
                'target' => 'VaultName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
              [
                'target' => 'Id',
                'source' => 'response',
                'path' => 'JobList[].JobId',
              ],
            ],
            'path' => 'JobList[]',
          ],
        ],
        'FailedJobs' => [
          'request' => [
            'operation' => 'ListJobs',
            'params' => [
              [
                'target' => 'accountId',
                'source' => 'identifier',
                'name' => 'AccountId',
              ],
              [
                'target' => 'vaultName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
              [
                'target' => 'statuscode',
                'source' => 'string',
                'value' => 'Failed',
              ],
            ],
          ],
          'resource' => [
            'type' => 'Job',
            'identifiers' => [
              [
                'target' => 'AccountId',
                'source' => 'identifier',
                'name' => 'AccountId',
              ],
              [
                'target' => 'VaultName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
              [
                'target' => 'Id',
                'source' => 'response',
                'path' => 'JobList[].JobId',
              ],
            ],
            'path' => 'JobList[]',
          ],
        ],
        'Jobs' => [
          'request' => [
            'operation' => 'ListJobs',
            'params' => [
              [
                'target' => 'accountId',
                'source' => 'identifier',
                'name' => 'AccountId',
              ],
              [
                'target' => 'vaultName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
          'resource' => [
            'type' => 'Job',
            'identifiers' => [
              [
                'target' => 'AccountId',
                'source' => 'identifier',
                'name' => 'AccountId',
              ],
              [
                'target' => 'VaultName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
              [
                'target' => 'Id',
                'source' => 'response',
                'path' => 'JobList[].JobId',
              ],
            ],
            'path' => 'JobList[]',
          ],
        ],
        'JobsInProgress' => [
          'request' => [
            'operation' => 'ListJobs',
            'params' => [
              [
                'target' => 'accountId',
                'source' => 'identifier',
                'name' => 'AccountId',
              ],
              [
                'target' => 'vaultName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
              [
                'target' => 'statuscode',
                'source' => 'string',
                'value' => 'InProgress',
              ],
            ],
          ],
          'resource' => [
            'type' => 'Job',
            'identifiers' => [
              [
                'target' => 'AccountId',
                'source' => 'identifier',
                'name' => 'AccountId',
              ],
              [
                'target' => 'VaultName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
              [
                'target' => 'Id',
                'source' => 'response',
                'path' => 'JobList[].JobId',
              ],
            ],
            'path' => 'JobList[]',
          ],
        ],
        'MultipartUplaods' => [
          'request' => [
            'operation' => 'ListMultipartUploads',
            'params' => [
              [
                'target' => 'vaultName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
              [
                'target' => 'accountId',
                'source' => 'identifier',
                'name' => 'AccountId',
              ],
            ],
          ],
          'resource' => [
            'type' => 'MultipartUpload',
            'identifiers' => [
              [
                'target' => 'AccountId',
                'source' => 'identifier',
                'name' => 'AccountId',
              ],
              [
                'target' => 'VaultName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
              [
                'target' => 'Id',
                'source' => 'response',
                'path' => 'UploadsList[].MultipartUploadId',
              ],
            ],
            'path' => 'UploadsList[]',
          ],
        ],
        'SucceededJobs' => [
          'request' => [
            'operation' => 'ListJobs',
            'params' => [
              [
                'target' => 'accountId',
                'source' => 'identifier',
                'name' => 'AccountId',
              ],
              [
                'target' => 'vaultName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
              [
                'target' => 'statuscode',
                'source' => 'string',
                'value' => 'Succeeded',
              ],
            ],
          ],
          'resource' => [
            'type' => 'Job',
            'identifiers' => [
              [
                'target' => 'AccountId',
                'source' => 'identifier',
                'name' => 'AccountId',
              ],
              [
                'target' => 'VaultName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
              [
                'target' => 'Id',
                'source' => 'response',
                'path' => 'JobList[].JobId',
              ],
            ],
            'path' => 'JobList[]',
          ],
        ],
      ],
    ],
  ],
];
