Skip to content

Commit 3c69539

Browse files
Move Protobuf serde to separate module (#253)
1 parent aee2f71 commit 3c69539

File tree

6 files changed

+82
-45
lines changed

6 files changed

+82
-45
lines changed

sdk-common/src/main/java/dev/restate/sdk/common/CoreSerdes.java

Lines changed: 0 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,6 @@
1313
import com.fasterxml.jackson.core.JsonParser;
1414
import com.fasterxml.jackson.core.JsonToken;
1515
import com.google.protobuf.ByteString;
16-
import com.google.protobuf.InvalidProtocolBufferException;
17-
import com.google.protobuf.MessageLite;
18-
import com.google.protobuf.Parser;
1916
import dev.restate.sdk.common.function.ThrowingBiConsumer;
2017
import dev.restate.sdk.common.function.ThrowingFunction;
2118
import java.io.ByteArrayInputStream;
@@ -146,39 +143,6 @@ public byte[] deserialize(byte[] value) {
146143
return p.getDoubleValue();
147144
});
148145

149-
public static <T extends MessageLite> Serde<T> ofProtobuf(Parser<T> parser) {
150-
return new Serde<>() {
151-
@Override
152-
public byte[] serialize(@Nullable T value) {
153-
return Objects.requireNonNull(value).toByteArray();
154-
}
155-
156-
@Override
157-
public T deserialize(byte[] value) {
158-
try {
159-
return parser.parseFrom(value);
160-
} catch (InvalidProtocolBufferException e) {
161-
throw new RuntimeException("Cannot deserialize Protobuf object", e);
162-
}
163-
}
164-
165-
// -- We reimplement the ByteString variants here as it might be more efficient to use them.
166-
@Override
167-
public ByteString serializeToByteString(@Nullable T value) {
168-
return Objects.requireNonNull(value).toByteString();
169-
}
170-
171-
@Override
172-
public T deserialize(ByteString byteString) {
173-
try {
174-
return parser.parseFrom(byteString);
175-
} catch (InvalidProtocolBufferException e) {
176-
throw new RuntimeException("Cannot deserialize Protobuf object", e);
177-
}
178-
}
179-
};
180-
}
181-
182146
// --- Helpers for jackson-core
183147

184148
private static final JsonFactory JSON_FACTORY = new JsonFactory();

sdk-serde-protobuf/build.gradle.kts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
plugins {
2+
`java-library`
3+
`library-publishing-conventions`
4+
}
5+
6+
description = "Restate SDK Protobuf integration"
7+
8+
dependencies {
9+
compileOnly(coreLibs.jspecify)
10+
11+
api(coreLibs.protobuf.java)
12+
13+
implementation(project(":sdk-common"))
14+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
// Copyright (c) 2023 - Restate Software, Inc., Restate GmbH
2+
//
3+
// This file is part of the Restate Java SDK,
4+
// which is released under the MIT license.
5+
//
6+
// You can find a copy of the license in file LICENSE in the root
7+
// directory of this repository or package, or at
8+
// https://github.com/restatedev/sdk-java/blob/main/LICENSE
9+
package dev.restate.sdk.serde.protobuf;
10+
11+
import com.google.protobuf.ByteString;
12+
import com.google.protobuf.InvalidProtocolBufferException;
13+
import com.google.protobuf.MessageLite;
14+
import com.google.protobuf.Parser;
15+
import dev.restate.sdk.common.Serde;
16+
import java.util.Objects;
17+
import org.jspecify.annotations.Nullable;
18+
19+
/** Collection of serializers/deserializers for Protobuf */
20+
public abstract class ProtobufSerdes {
21+
22+
private ProtobufSerdes() {}
23+
24+
public static <T extends MessageLite> Serde<T> of(Parser<T> parser) {
25+
return new Serde<>() {
26+
@Override
27+
public byte[] serialize(@Nullable T value) {
28+
return Objects.requireNonNull(value).toByteArray();
29+
}
30+
31+
@Override
32+
public T deserialize(byte[] value) {
33+
try {
34+
return parser.parseFrom(value);
35+
} catch (InvalidProtocolBufferException e) {
36+
throw new RuntimeException("Cannot deserialize Protobuf object", e);
37+
}
38+
}
39+
40+
// -- We reimplement the ByteString variants here as it might be more efficient to use them.
41+
@Override
42+
public ByteString serializeToByteString(@Nullable T value) {
43+
return Objects.requireNonNull(value).toByteString();
44+
}
45+
46+
@Override
47+
public T deserialize(ByteString byteString) {
48+
try {
49+
return parser.parseFrom(byteString);
50+
} catch (InvalidProtocolBufferException e) {
51+
throw new RuntimeException("Cannot deserialize Protobuf object", e);
52+
}
53+
}
54+
};
55+
}
56+
}

sdk-workflow-api/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ dependencies {
1919
implementation(jacksonLibs.jackson.annotations)
2020
implementation(jacksonLibs.jackson.jsr310)
2121
implementation(project(":sdk-serde-jackson"))
22+
implementation(project(":sdk-serde-protobuf"))
2223

2324
testImplementation(testingLibs.junit.jupiter)
2425
testImplementation(testingLibs.assertj)

sdk-workflow-api/src/main/java/dev/restate/sdk/workflow/impl/WorkflowImpl.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import dev.restate.sdk.common.*;
1818
import dev.restate.sdk.common.syscalls.ComponentDefinition;
1919
import dev.restate.sdk.serde.jackson.JacksonSerdes;
20+
import dev.restate.sdk.serde.protobuf.ProtobufSerdes;
2021
import dev.restate.sdk.workflow.WorkflowContext;
2122
import dev.restate.sdk.workflow.WorkflowExecutionState;
2223
import dev.restate.sdk.workflow.generated.*;
@@ -32,27 +33,27 @@ public class WorkflowImpl implements BindableComponent<Component.Options> {
3233
static final Serde<WorkflowExecutionState> WORKFLOW_EXECUTION_STATE_SERDE =
3334
JacksonSerdes.of(WorkflowExecutionState.class);
3435
static final Serde<GetStateResponse> GET_STATE_RESPONSE_SERDE =
35-
CoreSerdes.ofProtobuf(GetStateResponse.parser());
36+
ProtobufSerdes.of(GetStateResponse.parser());
3637
static final Serde<SetStateRequest> SET_STATE_REQUEST_SERDE =
37-
CoreSerdes.ofProtobuf(SetStateRequest.parser());
38+
ProtobufSerdes.of(SetStateRequest.parser());
3839
static final Serde<WaitDurablePromiseCompletionRequest>
3940
WAIT_DURABLE_PROMISE_COMPLETION_REQUEST_SERDE =
40-
CoreSerdes.ofProtobuf(WaitDurablePromiseCompletionRequest.parser());
41+
ProtobufSerdes.of(WaitDurablePromiseCompletionRequest.parser());
4142
static final Serde<MaybeDurablePromiseCompletion> MAYBE_DURABLE_PROMISE_COMPLETION_SERDE =
42-
CoreSerdes.ofProtobuf(MaybeDurablePromiseCompletion.parser());
43+
ProtobufSerdes.of(MaybeDurablePromiseCompletion.parser());
4344
static final Serde<CompleteDurablePromiseRequest> COMPLETE_DURABLE_PROMISE_REQUEST_SERDE =
44-
CoreSerdes.ofProtobuf(CompleteDurablePromiseRequest.parser());
45+
ProtobufSerdes.of(CompleteDurablePromiseRequest.parser());
4546
static final Serde<GetOutputResponse> GET_OUTPUT_RESPONSE_SERDE =
46-
CoreSerdes.ofProtobuf(GetOutputResponse.parser());
47+
ProtobufSerdes.of(GetOutputResponse.parser());
4748
private static final Serde<SetOutputRequest> SET_OUTPUT_REQUEST_SERDE =
48-
CoreSerdes.ofProtobuf(SetOutputRequest.parser());
49+
ProtobufSerdes.of(SetOutputRequest.parser());
4950
private static final Serde<DurablePromiseCompletion> DURABLE_PROMISE_COMPLETION_SERDE =
50-
CoreSerdes.ofProtobuf(DurablePromiseCompletion.parser());
51+
ProtobufSerdes.of(DurablePromiseCompletion.parser());
5152

5253
private static final Serde<Set<String>> DURABLEPROMISE_LISTENER_SERDE =
5354
JacksonSerdes.of(new TypeReference<>() {});
5455
private static final StateKey<MethodOutput> OUTPUT_KEY =
55-
StateKey.of("_output", CoreSerdes.ofProtobuf(MethodOutput.parser()));
56+
StateKey.of("_output", ProtobufSerdes.of(MethodOutput.parser()));
5657

5758
private static final StateKey<WorkflowExecutionState> WORKFLOW_EXECUTION_STATE_KEY =
5859
StateKey.of("_workflow_execution_state", WORKFLOW_EXECUTION_STATE_SERDE);

settings.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ include(
1818
"sdk-api-kotlin",
1919
"sdk-core",
2020
"sdk-serde-jackson",
21+
"sdk-serde-protobuf",
2122
"sdk-http-vertx",
2223
"sdk-lambda",
2324
"sdk-testing",

0 commit comments

Comments
 (0)