%% WARNING: DO NOT EDIT, AUTO-GENERATED CODE!
%% See https://github.com/aws-beam/aws-codegen for more details.
%% @doc AcceptQualificationRequest operation approves a
%% Worker's request for a Qualification.
%%
%% Only the owner of the Qualification type can grant a Qualification request
%% for that type.
%%
%% A successful request for the AcceptQualificationRequest
%% operation returns with no errors and an empty body.
accept_qualification_request(Client, Input)
when is_map(Client), is_map(Input) ->
accept_qualification_request(Client, Input, []).
accept_qualification_request(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"AcceptQualificationRequest">>, Input, Options).
%% @doc The ApproveAssignment operation approves the results of
%% a completed assignment.
%%
%% Approving an assignment initiates two payments from the Requester's
%% Amazon.com account
%%
%%
AssociateQualificationWithWorker operation gives a
%% Worker a Qualification. AssociateQualificationWithWorker does
%% not require that the Worker submit a Qualification request. It gives the
%% Qualification directly to the Worker.
%%
%% You can only assign a Qualification of a Qualification type that you
%% created (using the CreateQualificationType operation).
%%
%% AssociateQualificationWithWorker does not affect
%% any pending Qualification requests for the Qualification by the Worker. If
%% you assign a Qualification to a Worker, then later grant a Qualification
%% request made by the Worker, the granting of the request may modify the
%% Qualification score. To resolve a pending Qualification request without
%% affecting the Qualification the Worker already has, reject the request
%% with the RejectQualificationRequest operation.
%%
%% CreateAdditionalAssignmentsForHIT operation
%% increases the maximum number of assignments of an existing HIT.
%%
%% To extend the maximum number of assignments, specify the number of
%% additional assignments.
%%
%% AWS.MechanicalTurk.InvalidMaximumAssignmentsIncrease
%% exception.
%%
%% AWS.MechanicalTurk.HITTooOldForExtension
%% exception.
%%
%% CreateHIT operation creates a new Human Intelligence
%% Task (HIT). The new HIT is made available for Workers to find and accept
%% on the Amazon Mechanical Turk website.
%%
%% This operation allows you to specify a new HIT by passing in values for
%% the properties of the HIT, such as its title, reward amount and number of
%% assignments. When you pass these values to CreateHIT, a new
%% HIT is created for you, with a new HITTypeID. The HITTypeID
%% can be used to create additional HITs in the future without needing to
%% specify common parameters such as the title, description and reward amount
%% each time.
%%
%% An alternative way to create HITs is to first generate a HITTypeID using
%% the CreateHITType operation and then call the
%% CreateHITWithHITType operation. This is the recommended best
%% practice for Requesters who are creating large numbers of HITs.
%%
%% CreateHIT also supports several ways to provide question data: by
%% providing a value for the Question parameter that fully
%% specifies the contents of the HIT, or by providing a
%% HitLayoutId and associated HitLayoutParameters.
%%
%% CreateHITType operation creates a new HIT type. This
%% operation allows you to define a standard set of HIT properties to use
%% when creating HITs. If you register a HIT type with values that match an
%% existing HIT type, the HIT type ID of the existing type will be returned.
create_h_i_t_type(Client, Input)
when is_map(Client), is_map(Input) ->
create_h_i_t_type(Client, Input, []).
create_h_i_t_type(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"CreateHITType">>, Input, Options).
%% @doc The CreateHITWithHITType operation creates a new Human
%% Intelligence Task (HIT) using an existing HITTypeID generated by the
%% CreateHITType operation.
%%
%% This is an alternative way to create HITs from the CreateHIT
%% operation. This is the recommended best practice for Requesters who are
%% creating large numbers of HITs.
%%
%% CreateHITWithHITType also supports several ways to provide question data:
%% by providing a value for the Question parameter that fully
%% specifies the contents of the HIT, or by providing a
%% HitLayoutId and associated HitLayoutParameters.
%%
%% CreateQualificationType operation creates a new
%% Qualification type, which is represented by a
%% QualificationType data structure.
create_qualification_type(Client, Input)
when is_map(Client), is_map(Input) ->
create_qualification_type(Client, Input, []).
create_qualification_type(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"CreateQualificationType">>, Input, Options).
%% @doc The CreateWorkerBlock operation allows you to prevent a
%% Worker from working on your HITs. For example, you can block a Worker who
%% is producing poor quality work. You can block up to 100,000 Workers.
create_worker_block(Client, Input)
when is_map(Client), is_map(Input) ->
create_worker_block(Client, Input, []).
create_worker_block(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"CreateWorkerBlock">>, Input, Options).
%% @doc The DeleteHIT operation is used to delete HIT that is no
%% longer needed. Only the Requester who created the HIT can delete it.
%%
%% You can only dispose of HITs that are in the Reviewable
%% state, with all of their submitted assignments already either approved or
%% rejected. If you call the DeleteHIT operation on a HIT that is not in the
%% Reviewable state (for example, that has not expired, or still
%% has active assignments), or on a HIT that is Reviewable but without all of
%% its submitted assignments already approved or rejected, the service will
%% return an error.
%%
%% DeleteQualificationType deletes a Qualification type
%% and deletes any HIT types that are associated with the Qualification type.
%%
%% This operation does not revoke Qualifications already assigned to Workers
%% because the Qualifications might be needed for active HITs. If there are
%% any pending requests for the Qualification type, Amazon Mechanical Turk
%% rejects those requests. After you delete a Qualification type, you can no
%% longer use it to create HITs or HIT types.
%%
%% DeleteWorkerBlock operation allows you to reinstate
%% a blocked Worker to work on your HITs. This operation reverses the effects
%% of the CreateWorkerBlock operation. You need the Worker ID to use this
%% operation. If the Worker ID is missing or invalid, this operation fails
%% and returns the message “WorkerId is invalid.” If the specified Worker is
%% not blocked, this operation returns successfully.
delete_worker_block(Client, Input)
when is_map(Client), is_map(Input) ->
delete_worker_block(Client, Input, []).
delete_worker_block(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"DeleteWorkerBlock">>, Input, Options).
%% @doc The DisassociateQualificationFromWorker revokes a
%% previously granted Qualification from a user.
%%
%% You can provide a text message explaining why the Qualification was
%% revoked. The user who had the Qualification can see this message.
disassociate_qualification_from_worker(Client, Input)
when is_map(Client), is_map(Input) ->
disassociate_qualification_from_worker(Client, Input, []).
disassociate_qualification_from_worker(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"DisassociateQualificationFromWorker">>, Input, Options).
%% @doc The GetAccountBalance operation retrieves the amount of
%% money in your Amazon Mechanical Turk account.
get_account_balance(Client, Input)
when is_map(Client), is_map(Input) ->
get_account_balance(Client, Input, []).
get_account_balance(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"GetAccountBalance">>, Input, Options).
%% @doc The GetAssignment operation retrieves the details of the
%% specified Assignment.
get_assignment(Client, Input)
when is_map(Client), is_map(Input) ->
get_assignment(Client, Input, []).
get_assignment(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"GetAssignment">>, Input, Options).
%% @doc The GetFileUploadURL operation generates and returns a
%% temporary URL. You use the temporary URL to retrieve a file uploaded by a
%% Worker as an answer to a FileUploadAnswer question for a HIT. The
%% temporary URL is generated the instant the GetFileUploadURL operation is
%% called, and is valid for 60 seconds. You can get a temporary file upload
%% URL any time until the HIT is disposed. After the HIT is disposed, any
%% uploaded files are deleted, and cannot be retrieved. Pending Deprecation
%% on December 12, 2017. The Answer Specification structure will no longer
%% support the FileUploadAnswer element to be used for the
%% QuestionForm data structure. Instead, we recommend that Requesters who
%% want to create HITs asking Workers to upload files to use Amazon S3.
get_file_upload_u_r_l(Client, Input)
when is_map(Client), is_map(Input) ->
get_file_upload_u_r_l(Client, Input, []).
get_file_upload_u_r_l(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"GetFileUploadURL">>, Input, Options).
%% @doc The GetHIT operation retrieves the details of the
%% specified HIT.
get_h_i_t(Client, Input)
when is_map(Client), is_map(Input) ->
get_h_i_t(Client, Input, []).
get_h_i_t(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"GetHIT">>, Input, Options).
%% @doc The GetQualificationScore operation returns the value of
%% a Worker's Qualification for a given Qualification type.
%%
%% To get a Worker's Qualification, you must know the Worker's ID. The
%% Worker's ID is included in the assignment data returned by the
%% ListAssignmentsForHIT operation.
%%
%% Only the owner of a Qualification type can query the value of a Worker's
%% Qualification of that type.
get_qualification_score(Client, Input)
when is_map(Client), is_map(Input) ->
get_qualification_score(Client, Input, []).
get_qualification_score(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"GetQualificationScore">>, Input, Options).
%% @doc The GetQualificationTypeoperation retrieves information
%% about a Qualification type using its ID.
get_qualification_type(Client, Input)
when is_map(Client), is_map(Input) ->
get_qualification_type(Client, Input, []).
get_qualification_type(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"GetQualificationType">>, Input, Options).
%% @doc The ListAssignmentsForHIT operation retrieves completed
%% assignments for a HIT. You can use this operation to retrieve the results
%% for a HIT.
%%
%% You can get assignments for a HIT at any time, even if the HIT is not yet
%% Reviewable. If a HIT requested multiple assignments, and has received some
%% results but has not yet become Reviewable, you can still retrieve the
%% partial results with this operation.
%%
%% Use the AssignmentStatus parameter to control which set of assignments for
%% a HIT are returned. The ListAssignmentsForHIT operation can return
%% submitted assignments awaiting approval, or it can return assignments that
%% have already been approved or rejected. You can set
%% AssignmentStatus=Approved,Rejected to get assignments that have already
%% been approved and rejected together in one result set.
%%
%% Only the Requester who created the HIT can retrieve the assignments for
%% that HIT.
%%
%% Results are sorted and divided into numbered pages and the operation
%% returns a single page of results. You can use the parameters of the
%% operation to control sorting and pagination.
list_assignments_for_h_i_t(Client, Input)
when is_map(Client), is_map(Input) ->
list_assignments_for_h_i_t(Client, Input, []).
list_assignments_for_h_i_t(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"ListAssignmentsForHIT">>, Input, Options).
%% @doc The ListBonusPayments operation retrieves the amounts of
%% bonuses you have paid to Workers for a given HIT or assignment.
list_bonus_payments(Client, Input)
when is_map(Client), is_map(Input) ->
list_bonus_payments(Client, Input, []).
list_bonus_payments(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"ListBonusPayments">>, Input, Options).
%% @doc The ListHITs operation returns all of a Requester's
%% HITs. The operation returns HITs of any status, except for HITs that have
%% been deleted of with the DeleteHIT operation or that have been
%% auto-deleted.
list_h_i_ts(Client, Input)
when is_map(Client), is_map(Input) ->
list_h_i_ts(Client, Input, []).
list_h_i_ts(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"ListHITs">>, Input, Options).
%% @doc The ListHITsForQualificationType operation returns the
%% HITs that use the given Qualification type for a Qualification
%% requirement. The operation returns HITs of any status, except for HITs
%% that have been deleted with the DeleteHIT operation or that
%% have been auto-deleted.
list_h_i_ts_for_qualification_type(Client, Input)
when is_map(Client), is_map(Input) ->
list_h_i_ts_for_qualification_type(Client, Input, []).
list_h_i_ts_for_qualification_type(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"ListHITsForQualificationType">>, Input, Options).
%% @doc The ListQualificationRequests operation retrieves
%% requests for Qualifications of a particular Qualification type. The owner
%% of the Qualification type calls this operation to poll for pending
%% requests, and accepts them using the AcceptQualification operation.
list_qualification_requests(Client, Input)
when is_map(Client), is_map(Input) ->
list_qualification_requests(Client, Input, []).
list_qualification_requests(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"ListQualificationRequests">>, Input, Options).
%% @doc The ListQualificationTypes operation returns a list of
%% Qualification types, filtered by an optional search term.
list_qualification_types(Client, Input)
when is_map(Client), is_map(Input) ->
list_qualification_types(Client, Input, []).
list_qualification_types(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"ListQualificationTypes">>, Input, Options).
%% @doc The ListReviewPolicyResultsForHIT operation retrieves
%% the computed results and the actions taken in the course of executing your
%% Review Policies for a given HIT. For information about how to specify
%% Review Policies when you call CreateHIT, see Review Policies. The
%% ListReviewPolicyResultsForHIT operation can return results for both
%% Assignment-level and HIT-level review results.
list_review_policy_results_for_h_i_t(Client, Input)
when is_map(Client), is_map(Input) ->
list_review_policy_results_for_h_i_t(Client, Input, []).
list_review_policy_results_for_h_i_t(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"ListReviewPolicyResultsForHIT">>, Input, Options).
%% @doc The ListReviewableHITs operation retrieves the HITs with
%% Status equal to Reviewable or Status equal to Reviewing that belong to the
%% Requester calling the operation.
list_reviewable_h_i_ts(Client, Input)
when is_map(Client), is_map(Input) ->
list_reviewable_h_i_ts(Client, Input, []).
list_reviewable_h_i_ts(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"ListReviewableHITs">>, Input, Options).
%% @doc The ListWorkersBlocks operation retrieves a list of
%% Workers who are blocked from working on your HITs.
list_worker_blocks(Client, Input)
when is_map(Client), is_map(Input) ->
list_worker_blocks(Client, Input, []).
list_worker_blocks(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"ListWorkerBlocks">>, Input, Options).
%% @doc The ListWorkersWithQualificationType operation returns
%% all of the Workers that have been associated with a given Qualification
%% type.
list_workers_with_qualification_type(Client, Input)
when is_map(Client), is_map(Input) ->
list_workers_with_qualification_type(Client, Input, []).
list_workers_with_qualification_type(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"ListWorkersWithQualificationType">>, Input, Options).
%% @doc The NotifyWorkers operation sends an email to one or
%% more Workers that you specify with the Worker ID. You can specify up to
%% 100 Worker IDs to send the same message with a single call to the
%% NotifyWorkers operation. The NotifyWorkers operation will send a
%% notification email to a Worker only if you have previously approved or
%% rejected work from the Worker.
notify_workers(Client, Input)
when is_map(Client), is_map(Input) ->
notify_workers(Client, Input, []).
notify_workers(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"NotifyWorkers">>, Input, Options).
%% @doc The RejectAssignment operation rejects the results of a
%% completed assignment.
%%
%% You can include an optional feedback message with the rejection, which the
%% Worker can see in the Status section of the web site. When you include a
%% feedback message with the rejection, it helps the Worker understand why
%% the assignment was rejected, and can improve the quality of the results
%% the Worker submits in the future.
%%
%% Only the Requester who created the HIT can reject an assignment for the
%% HIT.
reject_assignment(Client, Input)
when is_map(Client), is_map(Input) ->
reject_assignment(Client, Input, []).
reject_assignment(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"RejectAssignment">>, Input, Options).
%% @doc The RejectQualificationRequest operation rejects a
%% user's request for a Qualification.
%%
%% You can provide a text message explaining why the request was rejected.
%% The Worker who made the request can see this message.
reject_qualification_request(Client, Input)
when is_map(Client), is_map(Input) ->
reject_qualification_request(Client, Input, []).
reject_qualification_request(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"RejectQualificationRequest">>, Input, Options).
%% @doc The SendBonus operation issues a payment of money from
%% your account to a Worker. This payment happens separately from the reward
%% you pay to the Worker when you approve the Worker's assignment. The
%% SendBonus operation requires the Worker's ID and the assignment ID as
%% parameters to initiate payment of the bonus. You must include a message
%% that explains the reason for the bonus payment, as the Worker may not be
%% expecting the payment. Amazon Mechanical Turk collects a fee for bonus
%% payments, similar to the HIT listing fee. This operation fails if your
%% account does not have enough funds to pay for both the bonus and the fees.
send_bonus(Client, Input)
when is_map(Client), is_map(Input) ->
send_bonus(Client, Input, []).
send_bonus(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"SendBonus">>, Input, Options).
%% @doc The SendTestEventNotification operation causes Amazon
%% Mechanical Turk to send a notification message as if a HIT event occurred,
%% according to the provided notification specification. This allows you to
%% test notifications without setting up notifications for a real HIT type
%% and trying to trigger them using the website. When you call this
%% operation, the service attempts to send the test notification immediately.
send_test_event_notification(Client, Input)
when is_map(Client), is_map(Input) ->
send_test_event_notification(Client, Input, []).
send_test_event_notification(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"SendTestEventNotification">>, Input, Options).
%% @doc The UpdateExpirationForHIT operation allows you update
%% the expiration time of a HIT. If you update it to a time in the past, the
%% HIT will be immediately expired.
update_expiration_for_h_i_t(Client, Input)
when is_map(Client), is_map(Input) ->
update_expiration_for_h_i_t(Client, Input, []).
update_expiration_for_h_i_t(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"UpdateExpirationForHIT">>, Input, Options).
%% @doc The UpdateHITReviewStatus operation updates the status
%% of a HIT. If the status is Reviewable, this operation can update the
%% status to Reviewing, or it can revert a Reviewing HIT back to the
%% Reviewable status.
update_h_i_t_review_status(Client, Input)
when is_map(Client), is_map(Input) ->
update_h_i_t_review_status(Client, Input, []).
update_h_i_t_review_status(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"UpdateHITReviewStatus">>, Input, Options).
%% @doc The UpdateHITTypeOfHIT operation allows you to change
%% the HITType properties of a HIT. This operation disassociates the HIT from
%% its old HITType properties and associates it with the new HITType
%% properties. The HIT takes on the properties of the new HITType in place of
%% the old ones.
update_h_i_t_type_of_h_i_t(Client, Input)
when is_map(Client), is_map(Input) ->
update_h_i_t_type_of_h_i_t(Client, Input, []).
update_h_i_t_type_of_h_i_t(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"UpdateHITTypeOfHIT">>, Input, Options).
%% @doc The UpdateNotificationSettings operation creates,
%% updates, disables or re-enables notifications for a HIT type. If you call
%% the UpdateNotificationSettings operation for a HIT type that already has a
%% notification specification, the operation replaces the old specification
%% with a new one. You can call the UpdateNotificationSettings operation to
%% enable or disable notifications for the HIT type, without having to modify
%% the notification specification itself by providing updates to the Active
%% status without specifying a new notification specification. To change the
%% Active status of a HIT type's notifications, the HIT type must already
%% have a notification specification, or one must be provided in the same
%% call to UpdateNotificationSettings.
update_notification_settings(Client, Input)
when is_map(Client), is_map(Input) ->
update_notification_settings(Client, Input, []).
update_notification_settings(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"UpdateNotificationSettings">>, Input, Options).
%% @doc The UpdateQualificationType operation modifies the
%% attributes of an existing Qualification type, which is represented by a
%% QualificationType data structure. Only the owner of a Qualification type
%% can modify its attributes.
%%
%% Most attributes of a Qualification type can be changed after the type has
%% been created. However, the Name and Keywords fields cannot be modified.
%% The RetryDelayInSeconds parameter can be modified or added to change the
%% delay or to enable retries, but RetryDelayInSeconds cannot be used to
%% disable retries.
%%
%% You can use this operation to update the test for a Qualification type.
%% The test is updated based on the values specified for the Test,
%% TestDurationInSeconds and AnswerKey parameters. All three parameters
%% specify the updated test. If you are updating the test for a type, you
%% must specify the Test and TestDurationInSeconds parameters. The AnswerKey
%% parameter is optional; omitting it specifies that the updated test does
%% not have an answer key.
%%
%% If you omit the Test parameter, the test for the Qualification type is
%% unchanged. There is no way to remove a test from a Qualification type that
%% has one. If the type already has a test, you cannot update it to be
%% AutoGranted. If the Qualification type does not have a test and one is
%% provided by an update, the type will henceforth have a test.
%%
%% If you want to update the test duration or answer key for an existing test
%% without changing the questions, you must specify a Test parameter with the
%% original questions, along with the updated values.
%%
%% If you provide an updated Test but no AnswerKey, the new test will not
%% have an answer key. Requests for such Qualifications must be granted
%% manually.
%%
%% You can also update the AutoGranted and AutoGrantedValue attributes of the
%% Qualification type.
update_qualification_type(Client, Input)
when is_map(Client), is_map(Input) ->
update_qualification_type(Client, Input, []).
update_qualification_type(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"UpdateQualificationType">>, Input, Options).
%%====================================================================
%% Internal functions
%%====================================================================
-spec request(aws_client:aws_client(), binary(), map(), list()) ->
{ok, Result, {integer(), list(), hackney:client()}} |
{error, Error, {integer(), list(), hackney:client()}} |
{error, term()} when
Result :: map() | undefined,
Error :: {binary(), binary()}.
request(Client, Action, Input, Options) ->
Client1 = Client#{service => <<"mturk-requester">>},
Host = get_host(<<"mturk-requester">>, Client1),
URL = get_url(Host, Client1),
Headers = [
{<<"Host">>, Host},
{<<"Content-Type">>, <<"application/x-amz-json-1.1">>},
{<<"X-Amz-Target">>, << <<"MTurkRequesterServiceV20170117.">>/binary, Action/binary>>}
],
Payload = jsx:encode(Input),
SignedHeaders = aws_request:sign_request(Client1, <<"POST">>, URL, Headers, Payload),
Response = hackney:request(post, URL, SignedHeaders, Payload, Options),
handle_response(Response).
handle_response({ok, 200, ResponseHeaders, Client}) ->
case hackney:body(Client) of
{ok, <<>>} ->
{ok, undefined, {200, ResponseHeaders, Client}};
{ok, Body} ->
Result = jsx:decode(Body, [return_maps]),
{ok, Result, {200, ResponseHeaders, Client}}
end;
handle_response({ok, StatusCode, ResponseHeaders, Client}) ->
{ok, Body} = hackney:body(Client),
Error = jsx:decode(Body, [return_maps]),
Exception = maps:get(<<"__type">>, Error, undefined),
Reason = maps:get(<<"message">>, Error, undefined),
{error, {Exception, Reason}, {StatusCode, ResponseHeaders, Client}};
handle_response({error, Reason}) ->
{error, Reason}.
get_host(_EndpointPrefix, #{region := <<"local">>}) ->
<<"localhost">>;
get_host(EndpointPrefix, #{region := Region, endpoint := Endpoint}) ->
aws_util:binary_join([EndpointPrefix, <<".">>, Region, <<".">>, Endpoint], <<"">>).
get_url(Host, Client) ->
Proto = maps:get(proto, Client),
Port = maps:get(port, Client),
aws_util:binary_join([Proto, <<"://">>, Host, <<":">>, Port, <<"/">>], <<"">>).