public static Waiter fromNode(Node node) {
        ObjectNode value = node.expectObjectNode().warnIfAdditionalProperties(KEYS);
        Builder builder = builder();
        value.getStringMember(DOCUMENTATION).map(StringNode::getValue).ifPresent(builder::documentation);

        for (Node entry : value.expectArrayMember(ACCEPTORS).getElements()) {
            builder.addAcceptor(Acceptor.fromNode(entry));
        }

        value.getNumberMember(MIN_DELAY).map(NumberNode::getValue).map(Number::intValue).ifPresent(builder::minDelay);
        value.getNumberMember(MAX_DELAY).map(NumberNode::getValue).map(Number::intValue).ifPresent(builder::maxDelay);

        builder.deprecated(value.getBooleanMemberOrDefault(DEPRECATED));
        value.getMember(TAGS).ifPresent(tags -> builder.tags(Node.loadArrayOfString(TAGS, tags)));

        return builder.build();
    }
Create a {@code Waiter} from a {@link Node}.

@param node {@code Node} to create the {@code Waiter} from.
@return Returns the created {@code Waiter}.
@throws ExpectationNotMetException if the given {@code node} is invalid.
smithy-waiters/src/main/java/software/amazon/smithy/waiters/Waiter.java