clients/client-notificationscontacts/src/protocols/Aws_restJson1.ts (500 lines of code) (raw):
// smithy-typescript generated code
import { loadRestJsonErrorCode, parseJsonBody as parseBody, parseJsonErrorBody as parseErrorBody } from "@aws-sdk/core";
import { requestBuilder as rb } from "@smithy/core";
import { HttpRequest as __HttpRequest, HttpResponse as __HttpResponse } from "@smithy/protocol-http";
import {
_json,
collectBody,
decorateServiceException as __decorateServiceException,
expectNonNull as __expectNonNull,
expectObject as __expectObject,
expectString as __expectString,
extendedEncodeURIComponent as __extendedEncodeURIComponent,
map,
parseRfc3339DateTimeWithOffset as __parseRfc3339DateTimeWithOffset,
resolvedPath as __resolvedPath,
strictParseInt32 as __strictParseInt32,
take,
withBaseException,
} from "@smithy/smithy-client";
import {
Endpoint as __Endpoint,
ResponseMetadata as __ResponseMetadata,
SerdeContext as __SerdeContext,
} from "@smithy/types";
import {
ActivateEmailContactCommandInput,
ActivateEmailContactCommandOutput,
} from "../commands/ActivateEmailContactCommand";
import { CreateEmailContactCommandInput, CreateEmailContactCommandOutput } from "../commands/CreateEmailContactCommand";
import { DeleteEmailContactCommandInput, DeleteEmailContactCommandOutput } from "../commands/DeleteEmailContactCommand";
import { GetEmailContactCommandInput, GetEmailContactCommandOutput } from "../commands/GetEmailContactCommand";
import { ListEmailContactsCommandInput, ListEmailContactsCommandOutput } from "../commands/ListEmailContactsCommand";
import {
ListTagsForResourceCommandInput,
ListTagsForResourceCommandOutput,
} from "../commands/ListTagsForResourceCommand";
import { SendActivationCodeCommandInput, SendActivationCodeCommandOutput } from "../commands/SendActivationCodeCommand";
import { TagResourceCommandInput, TagResourceCommandOutput } from "../commands/TagResourceCommand";
import { UntagResourceCommandInput, UntagResourceCommandOutput } from "../commands/UntagResourceCommand";
import {
AccessDeniedException,
ConflictException,
EmailContact,
InternalServerException,
ResourceNotFoundException,
ServiceQuotaExceededException,
ThrottlingException,
ValidationException,
} from "../models/models_0";
import { NotificationsContactsServiceException as __BaseException } from "../models/NotificationsContactsServiceException";
/**
* serializeAws_restJson1ActivateEmailContactCommand
*/
export const se_ActivateEmailContactCommand = async (
input: ActivateEmailContactCommandInput,
context: __SerdeContext
): Promise<__HttpRequest> => {
const b = rb(input, context);
const headers: any = {};
b.bp("/emailcontacts/{arn}/activate/{code}");
b.p("arn", () => input.arn!, "{arn}", false);
b.p("code", () => input.code!, "{code}", false);
let body: any;
b.m("PUT").h(headers).b(body);
return b.build();
};
/**
* serializeAws_restJson1CreateEmailContactCommand
*/
export const se_CreateEmailContactCommand = async (
input: CreateEmailContactCommandInput,
context: __SerdeContext
): Promise<__HttpRequest> => {
const b = rb(input, context);
const headers: any = {
"content-type": "application/json",
};
b.bp("/2022-09-19/emailcontacts");
let body: any;
body = JSON.stringify(
take(input, {
emailAddress: [],
name: [],
tags: (_) => _json(_),
})
);
b.m("POST").h(headers).b(body);
return b.build();
};
/**
* serializeAws_restJson1DeleteEmailContactCommand
*/
export const se_DeleteEmailContactCommand = async (
input: DeleteEmailContactCommandInput,
context: __SerdeContext
): Promise<__HttpRequest> => {
const b = rb(input, context);
const headers: any = {};
b.bp("/emailcontacts/{arn}");
b.p("arn", () => input.arn!, "{arn}", false);
let body: any;
b.m("DELETE").h(headers).b(body);
return b.build();
};
/**
* serializeAws_restJson1GetEmailContactCommand
*/
export const se_GetEmailContactCommand = async (
input: GetEmailContactCommandInput,
context: __SerdeContext
): Promise<__HttpRequest> => {
const b = rb(input, context);
const headers: any = {};
b.bp("/emailcontacts/{arn}");
b.p("arn", () => input.arn!, "{arn}", false);
let body: any;
b.m("GET").h(headers).b(body);
return b.build();
};
/**
* serializeAws_restJson1ListEmailContactsCommand
*/
export const se_ListEmailContactsCommand = async (
input: ListEmailContactsCommandInput,
context: __SerdeContext
): Promise<__HttpRequest> => {
const b = rb(input, context);
const headers: any = {};
b.bp("/emailcontacts");
const query: any = map({
[_mR]: [() => input.maxResults !== void 0, () => input[_mR]!.toString()],
[_nT]: [, input[_nT]!],
});
let body: any;
b.m("GET").h(headers).q(query).b(body);
return b.build();
};
/**
* serializeAws_restJson1ListTagsForResourceCommand
*/
export const se_ListTagsForResourceCommand = async (
input: ListTagsForResourceCommandInput,
context: __SerdeContext
): Promise<__HttpRequest> => {
const b = rb(input, context);
const headers: any = {};
b.bp("/tags/{arn}");
b.p("arn", () => input.arn!, "{arn}", false);
let body: any;
b.m("GET").h(headers).b(body);
return b.build();
};
/**
* serializeAws_restJson1SendActivationCodeCommand
*/
export const se_SendActivationCodeCommand = async (
input: SendActivationCodeCommandInput,
context: __SerdeContext
): Promise<__HttpRequest> => {
const b = rb(input, context);
const headers: any = {};
b.bp("/2022-10-31/emailcontacts/{arn}/activate/send");
b.p("arn", () => input.arn!, "{arn}", false);
let body: any;
b.m("POST").h(headers).b(body);
return b.build();
};
/**
* serializeAws_restJson1TagResourceCommand
*/
export const se_TagResourceCommand = async (
input: TagResourceCommandInput,
context: __SerdeContext
): Promise<__HttpRequest> => {
const b = rb(input, context);
const headers: any = {
"content-type": "application/json",
};
b.bp("/tags/{arn}");
b.p("arn", () => input.arn!, "{arn}", false);
let body: any;
body = JSON.stringify(
take(input, {
tags: (_) => _json(_),
})
);
b.m("POST").h(headers).b(body);
return b.build();
};
/**
* serializeAws_restJson1UntagResourceCommand
*/
export const se_UntagResourceCommand = async (
input: UntagResourceCommandInput,
context: __SerdeContext
): Promise<__HttpRequest> => {
const b = rb(input, context);
const headers: any = {};
b.bp("/tags/{arn}");
b.p("arn", () => input.arn!, "{arn}", false);
const query: any = map({
[_tK]: [__expectNonNull(input.tagKeys, `tagKeys`) != null, () => input[_tK]! || []],
});
let body: any;
b.m("DELETE").h(headers).q(query).b(body);
return b.build();
};
/**
* deserializeAws_restJson1ActivateEmailContactCommand
*/
export const de_ActivateEmailContactCommand = async (
output: __HttpResponse,
context: __SerdeContext
): Promise<ActivateEmailContactCommandOutput> => {
if (output.statusCode !== 200 && output.statusCode >= 300) {
return de_CommandError(output, context);
}
const contents: any = map({
$metadata: deserializeMetadata(output),
});
await collectBody(output.body, context);
return contents;
};
/**
* deserializeAws_restJson1CreateEmailContactCommand
*/
export const de_CreateEmailContactCommand = async (
output: __HttpResponse,
context: __SerdeContext
): Promise<CreateEmailContactCommandOutput> => {
if (output.statusCode !== 201 && output.statusCode >= 300) {
return de_CommandError(output, context);
}
const contents: any = map({
$metadata: deserializeMetadata(output),
});
const data: Record<string, any> = __expectNonNull(__expectObject(await parseBody(output.body, context)), "body");
const doc = take(data, {
arn: __expectString,
});
Object.assign(contents, doc);
return contents;
};
/**
* deserializeAws_restJson1DeleteEmailContactCommand
*/
export const de_DeleteEmailContactCommand = async (
output: __HttpResponse,
context: __SerdeContext
): Promise<DeleteEmailContactCommandOutput> => {
if (output.statusCode !== 200 && output.statusCode >= 300) {
return de_CommandError(output, context);
}
const contents: any = map({
$metadata: deserializeMetadata(output),
});
await collectBody(output.body, context);
return contents;
};
/**
* deserializeAws_restJson1GetEmailContactCommand
*/
export const de_GetEmailContactCommand = async (
output: __HttpResponse,
context: __SerdeContext
): Promise<GetEmailContactCommandOutput> => {
if (output.statusCode !== 200 && output.statusCode >= 300) {
return de_CommandError(output, context);
}
const contents: any = map({
$metadata: deserializeMetadata(output),
});
const data: Record<string, any> = __expectNonNull(__expectObject(await parseBody(output.body, context)), "body");
const doc = take(data, {
emailContact: (_) => de_EmailContact(_, context),
});
Object.assign(contents, doc);
return contents;
};
/**
* deserializeAws_restJson1ListEmailContactsCommand
*/
export const de_ListEmailContactsCommand = async (
output: __HttpResponse,
context: __SerdeContext
): Promise<ListEmailContactsCommandOutput> => {
if (output.statusCode !== 200 && output.statusCode >= 300) {
return de_CommandError(output, context);
}
const contents: any = map({
$metadata: deserializeMetadata(output),
});
const data: Record<string, any> = __expectNonNull(__expectObject(await parseBody(output.body, context)), "body");
const doc = take(data, {
emailContacts: (_) => de_EmailContacts(_, context),
nextToken: __expectString,
});
Object.assign(contents, doc);
return contents;
};
/**
* deserializeAws_restJson1ListTagsForResourceCommand
*/
export const de_ListTagsForResourceCommand = async (
output: __HttpResponse,
context: __SerdeContext
): Promise<ListTagsForResourceCommandOutput> => {
if (output.statusCode !== 200 && output.statusCode >= 300) {
return de_CommandError(output, context);
}
const contents: any = map({
$metadata: deserializeMetadata(output),
});
const data: Record<string, any> = __expectNonNull(__expectObject(await parseBody(output.body, context)), "body");
const doc = take(data, {
tags: _json,
});
Object.assign(contents, doc);
return contents;
};
/**
* deserializeAws_restJson1SendActivationCodeCommand
*/
export const de_SendActivationCodeCommand = async (
output: __HttpResponse,
context: __SerdeContext
): Promise<SendActivationCodeCommandOutput> => {
if (output.statusCode !== 200 && output.statusCode >= 300) {
return de_CommandError(output, context);
}
const contents: any = map({
$metadata: deserializeMetadata(output),
});
await collectBody(output.body, context);
return contents;
};
/**
* deserializeAws_restJson1TagResourceCommand
*/
export const de_TagResourceCommand = async (
output: __HttpResponse,
context: __SerdeContext
): Promise<TagResourceCommandOutput> => {
if (output.statusCode !== 200 && output.statusCode >= 300) {
return de_CommandError(output, context);
}
const contents: any = map({
$metadata: deserializeMetadata(output),
});
await collectBody(output.body, context);
return contents;
};
/**
* deserializeAws_restJson1UntagResourceCommand
*/
export const de_UntagResourceCommand = async (
output: __HttpResponse,
context: __SerdeContext
): Promise<UntagResourceCommandOutput> => {
if (output.statusCode !== 200 && output.statusCode >= 300) {
return de_CommandError(output, context);
}
const contents: any = map({
$metadata: deserializeMetadata(output),
});
await collectBody(output.body, context);
return contents;
};
/**
* deserialize_Aws_restJson1CommandError
*/
const de_CommandError = async (output: __HttpResponse, context: __SerdeContext): Promise<never> => {
const parsedOutput: any = {
...output,
body: await parseErrorBody(output.body, context),
};
const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);
switch (errorCode) {
case "AccessDeniedException":
case "com.amazonaws.notificationscontacts#AccessDeniedException":
throw await de_AccessDeniedExceptionRes(parsedOutput, context);
case "ConflictException":
case "com.amazonaws.notificationscontacts#ConflictException":
throw await de_ConflictExceptionRes(parsedOutput, context);
case "InternalServerException":
case "com.amazonaws.notificationscontacts#InternalServerException":
throw await de_InternalServerExceptionRes(parsedOutput, context);
case "ResourceNotFoundException":
case "com.amazonaws.notificationscontacts#ResourceNotFoundException":
throw await de_ResourceNotFoundExceptionRes(parsedOutput, context);
case "ThrottlingException":
case "com.amazonaws.notificationscontacts#ThrottlingException":
throw await de_ThrottlingExceptionRes(parsedOutput, context);
case "ValidationException":
case "com.amazonaws.notificationscontacts#ValidationException":
throw await de_ValidationExceptionRes(parsedOutput, context);
case "ServiceQuotaExceededException":
case "com.amazonaws.notificationscontacts#ServiceQuotaExceededException":
throw await de_ServiceQuotaExceededExceptionRes(parsedOutput, context);
default:
const parsedBody = parsedOutput.body;
return throwDefaultError({
output,
parsedBody,
errorCode,
}) as never;
}
};
const throwDefaultError = withBaseException(__BaseException);
/**
* deserializeAws_restJson1AccessDeniedExceptionRes
*/
const de_AccessDeniedExceptionRes = async (
parsedOutput: any,
context: __SerdeContext
): Promise<AccessDeniedException> => {
const contents: any = map({});
const data: any = parsedOutput.body;
const doc = take(data, {
message: __expectString,
});
Object.assign(contents, doc);
const exception = new AccessDeniedException({
$metadata: deserializeMetadata(parsedOutput),
...contents,
});
return __decorateServiceException(exception, parsedOutput.body);
};
/**
* deserializeAws_restJson1ConflictExceptionRes
*/
const de_ConflictExceptionRes = async (parsedOutput: any, context: __SerdeContext): Promise<ConflictException> => {
const contents: any = map({});
const data: any = parsedOutput.body;
const doc = take(data, {
message: __expectString,
resourceId: __expectString,
resourceType: __expectString,
});
Object.assign(contents, doc);
const exception = new ConflictException({
$metadata: deserializeMetadata(parsedOutput),
...contents,
});
return __decorateServiceException(exception, parsedOutput.body);
};
/**
* deserializeAws_restJson1InternalServerExceptionRes
*/
const de_InternalServerExceptionRes = async (
parsedOutput: any,
context: __SerdeContext
): Promise<InternalServerException> => {
const contents: any = map({});
const data: any = parsedOutput.body;
const doc = take(data, {
message: __expectString,
});
Object.assign(contents, doc);
const exception = new InternalServerException({
$metadata: deserializeMetadata(parsedOutput),
...contents,
});
return __decorateServiceException(exception, parsedOutput.body);
};
/**
* deserializeAws_restJson1ResourceNotFoundExceptionRes
*/
const de_ResourceNotFoundExceptionRes = async (
parsedOutput: any,
context: __SerdeContext
): Promise<ResourceNotFoundException> => {
const contents: any = map({});
const data: any = parsedOutput.body;
const doc = take(data, {
message: __expectString,
resourceId: __expectString,
resourceType: __expectString,
});
Object.assign(contents, doc);
const exception = new ResourceNotFoundException({
$metadata: deserializeMetadata(parsedOutput),
...contents,
});
return __decorateServiceException(exception, parsedOutput.body);
};
/**
* deserializeAws_restJson1ServiceQuotaExceededExceptionRes
*/
const de_ServiceQuotaExceededExceptionRes = async (
parsedOutput: any,
context: __SerdeContext
): Promise<ServiceQuotaExceededException> => {
const contents: any = map({});
const data: any = parsedOutput.body;
const doc = take(data, {
message: __expectString,
quotaCode: __expectString,
resourceId: __expectString,
resourceType: __expectString,
serviceCode: __expectString,
});
Object.assign(contents, doc);
const exception = new ServiceQuotaExceededException({
$metadata: deserializeMetadata(parsedOutput),
...contents,
});
return __decorateServiceException(exception, parsedOutput.body);
};
/**
* deserializeAws_restJson1ThrottlingExceptionRes
*/
const de_ThrottlingExceptionRes = async (parsedOutput: any, context: __SerdeContext): Promise<ThrottlingException> => {
const contents: any = map({
[_rAS]: [() => void 0 !== parsedOutput.headers[_ra], () => __strictParseInt32(parsedOutput.headers[_ra])],
});
const data: any = parsedOutput.body;
const doc = take(data, {
message: __expectString,
quotaCode: __expectString,
serviceCode: __expectString,
});
Object.assign(contents, doc);
const exception = new ThrottlingException({
$metadata: deserializeMetadata(parsedOutput),
...contents,
});
return __decorateServiceException(exception, parsedOutput.body);
};
/**
* deserializeAws_restJson1ValidationExceptionRes
*/
const de_ValidationExceptionRes = async (parsedOutput: any, context: __SerdeContext): Promise<ValidationException> => {
const contents: any = map({});
const data: any = parsedOutput.body;
const doc = take(data, {
fieldList: _json,
message: __expectString,
reason: __expectString,
});
Object.assign(contents, doc);
const exception = new ValidationException({
$metadata: deserializeMetadata(parsedOutput),
...contents,
});
return __decorateServiceException(exception, parsedOutput.body);
};
// se_TagMap omitted.
/**
* deserializeAws_restJson1EmailContact
*/
const de_EmailContact = (output: any, context: __SerdeContext): EmailContact => {
return take(output, {
address: __expectString,
arn: __expectString,
creationTime: (_: any) => __expectNonNull(__parseRfc3339DateTimeWithOffset(_)),
name: __expectString,
status: __expectString,
updateTime: (_: any) => __expectNonNull(__parseRfc3339DateTimeWithOffset(_)),
}) as any;
};
/**
* deserializeAws_restJson1EmailContacts
*/
const de_EmailContacts = (output: any, context: __SerdeContext): EmailContact[] => {
const retVal = (output || [])
.filter((e: any) => e != null)
.map((entry: any) => {
return de_EmailContact(entry, context);
});
return retVal;
};
// de_TagMap omitted.
// de_ValidationExceptionField omitted.
// de_ValidationExceptionFieldList omitted.
const deserializeMetadata = (output: __HttpResponse): __ResponseMetadata => ({
httpStatusCode: output.statusCode,
requestId:
output.headers["x-amzn-requestid"] ?? output.headers["x-amzn-request-id"] ?? output.headers["x-amz-request-id"],
extendedRequestId: output.headers["x-amz-id-2"],
cfId: output.headers["x-amz-cf-id"],
});
// Encode Uint8Array data into string with utf-8.
const collectBodyString = (streamBody: any, context: __SerdeContext): Promise<string> =>
collectBody(streamBody, context).then((body) => context.utf8Encoder(body));
const _mR = "maxResults";
const _nT = "nextToken";
const _rAS = "retryAfterSeconds";
const _ra = "retry-after";
const _tK = "tagKeys";