in codegen/src/main/java/software/amazon/awssdk/codegen/poet/waiters/BaseWaiterClassSpec.java [450:508]
private CodeBlock acceptor(Acceptor acceptor) {
CodeBlock.Builder result = CodeBlock.builder();
switch (acceptor.getState()) {
case "success":
result.add("$T.success", WaiterAcceptor.class);
break;
case "failure":
result.add("$T.error", WaiterAcceptor.class);
break;
case "retry":
result.add("$T.retry", WaiterAcceptor.class);
break;
default:
throw new IllegalArgumentException("Unsupported acceptor state: " + acceptor.getState());
}
switch (acceptor.getMatcher()) {
case "path":
result.add("OnResponseAcceptor(");
result.add(pathAcceptorBody(acceptor));
addFailureMessageForPathMatcher(acceptor, result);
result.add(")");
break;
case "pathAll":
result.add("OnResponseAcceptor(");
result.add(pathAllAcceptorBody(acceptor));
addFailureMessageForPathMatcher(acceptor, result);
result.add(")");
break;
case "pathAny":
result.add("OnResponseAcceptor(");
result.add(pathAnyAcceptorBody(acceptor));
addFailureMessageForPathMatcher(acceptor, result);
result.add(")");
break;
case "status":
// Note: Ignores the result we've built so far because this uses a special acceptor implementation.
int expected = Integer.parseInt(acceptor.getExpected().asText());
return CodeBlock.of("new $T($L, $T.$L)", poetExtensions.waitersRuntimeClass()
.nestedClass("ResponseStatusAcceptor"),
expected, WaiterState.class, waiterState(acceptor));
case "error":
if (acceptor.getExpected() instanceof JrsBoolean) {
result.add(booleanValueErrorBlock(acceptor, Boolean.parseBoolean(acceptor.getExpected().asText())).build());
} else {
result.add("OnExceptionAcceptor(");
result.add(errorAcceptorBody(acceptor));
addAcceptorFailureMessage(result, acceptor, () -> String.format(FAILURE_MESSAGE_FORMAT_FOR_ERROR_MATCHER,
expectedValue(acceptor)));
result.add(")");
}
break;
default:
throw new IllegalArgumentException("Unsupported acceptor matcher: " + acceptor.getMatcher());
}
return result.build();
}