in lib/eventstream_rpc.ts [1202:1223]
function deserializeMessage(model: EventstreamRpcServiceModel, operationName: string, message: eventstream.Message, shapeSelector : OperationShapeSelector) {
let operation = model.operations.get(operationName);
if (!operation) {
throw createRpcError(RpcErrorType.InternalError, `No operation named '${operationName}' exists in the service model`);
}
let messageShape : string | undefined = getEventStreamMessageHeaderValueAsString(message, SERVICE_MODEL_TYPE_HEADER_NAME);
let operationShape : string | undefined = shapeSelector(operation);
if (!messageShape || messageShape !== operationShape || !operationShape) {
throwResponseError(model, operation.errorShapes, messageShape, message);
return;
}
let deserializer = model.deserializers.get(operationShape);
if (!deserializer) {
throw createRpcError(RpcErrorType.InternalError, `No top-level shape deserializer for '${operationShape}' exists in the service model`);
}
let response = deserializer(message);
return response;
}