LambdaDurableFunctionsClient.java

// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
package software.amazon.lambda.durable.client;

import java.util.List;
import java.util.Objects;
import software.amazon.awssdk.services.lambda.LambdaClient;
import software.amazon.awssdk.services.lambda.model.CheckpointDurableExecutionRequest;
import software.amazon.awssdk.services.lambda.model.CheckpointDurableExecutionResponse;
import software.amazon.awssdk.services.lambda.model.GetDurableExecutionStateRequest;
import software.amazon.awssdk.services.lambda.model.GetDurableExecutionStateResponse;
import software.amazon.awssdk.services.lambda.model.OperationUpdate;

public class LambdaDurableFunctionsClient implements DurableExecutionClient {

    private final LambdaClient lambdaClient;

    /**
     * Creates a LambdaDurableFunctionsClient with the provided LambdaClient.
     *
     * @param lambdaClient LambdaClient instance to use for backend communication
     * @throws NullPointerException if lambdaClient is null
     */
    public LambdaDurableFunctionsClient(LambdaClient lambdaClient) {
        this.lambdaClient = Objects.requireNonNull(lambdaClient, "LambdaClient cannot be null");
    }

    @Override
    public CheckpointDurableExecutionResponse checkpoint(String arn, String token, List<OperationUpdate> updates) {
        var request = CheckpointDurableExecutionRequest.builder()
                .durableExecutionArn(arn)
                .checkpointToken(token)
                .updates(updates)
                .build();

        return lambdaClient.checkpointDurableExecution(request);
    }

    @Override
    public GetDurableExecutionStateResponse getExecutionState(String arn, String checkpointToken, String marker) {
        var request = GetDurableExecutionStateRequest.builder()
                .durableExecutionArn(arn)
                .checkpointToken(checkpointToken)
                .marker(marker)
                .build();

        return lambdaClient.getDurableExecutionState(request);
    }
}