Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
109 changes: 109 additions & 0 deletions sdk-api-gen/src/main/resources/templates/Client.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -9,24 +9,38 @@ import java.util.Optional;
import java.time.Duration;
import java.util.function.Consumer;

/**
* Clients for {@link {{originalClassFqcn}} }
*
* @see {{originalClassFqcn}}
*/
public class {{generatedClassSimpleName}} {

/**
* Create context client for {@link {{originalClassFqcn}} }
*
* @see {{originalClassFqcn}}
*/
public static ContextClient fromContext(Context ctx{{#isKeyed}}, String key{{/isKeyed}}) {
return new ContextClient(ctx{{#isKeyed}}, key{{/isKeyed}});
}

/** Create ingress client for {@link {{originalClassFqcn}} } **/
public static IngressClient fromClient(dev.restate.client.Client client{{#isKeyed}}, String key{{/isKeyed}}) {
return new IngressClient(client{{#isKeyed}}, key{{/isKeyed}});
}

/** Create ingress client for {@link {{originalClassFqcn}} } **/
public static IngressClient connect(String baseUri{{#isKeyed}}, String key{{/isKeyed}}) {
return new IngressClient(dev.restate.client.Client.connect(baseUri, {{metadataClass}}.SERDE_FACTORY){{#isKeyed}}, key{{/isKeyed}});
}

/** Create ingress client for {@link {{originalClassFqcn}} } **/
public static IngressClient connect(String baseUri, dev.restate.client.RequestOptions requestOptions{{#isKeyed}}, String key{{/isKeyed}}) {
return new IngressClient(dev.restate.client.Client.connect(baseUri, {{metadataClass}}.SERDE_FACTORY, requestOptions){{#isKeyed}}, key{{/isKeyed}});
}

/** Context client for {@link {{originalClassFqcn}} } **/
public static class ContextClient {

private final Context ctx;
Expand All @@ -38,12 +52,18 @@ public class {{generatedClassSimpleName}} {
}

{{#handlers}}
/**
* @see {{originalClassFqcn}}#{{name}}
**/
public CallDurableFuture<{{{boxedOutputFqcn}}}> {{handlersClassMethodName}}({{^inputEmpty}}{{{inputFqcn}}} req{{/inputEmpty}}) {
return this.ctx.call(
{{../handlersClass}}.{{handlersClassMethodName}}({{#if ../isKeyed}}this.key{{^inputEmpty}}, {{/inputEmpty}}{{/if}}{{^inputEmpty}}req{{/inputEmpty}})
);
}

/**
* @see {{originalClassFqcn}}#{{name}}
**/
public CallDurableFuture<{{{boxedOutputFqcn}}}> {{handlersClassMethodName}}({{^inputEmpty}}{{{inputFqcn}}} req, {{/inputEmpty}}Consumer<dev.restate.common.RequestBuilder<{{{boxedInputFqcn}}}, {{{boxedOutputFqcn}}}>> requestBuilderApplier) {
var reqBuilder = {{../handlersClass}}.{{handlersClassMethodName}}({{#if ../isKeyed}}this.key{{^inputEmpty}}, {{/inputEmpty}}{{/if}}{{^inputEmpty}}req{{/inputEmpty}});
if (requestBuilderApplier != null) {
Expand All @@ -60,23 +80,35 @@ public class {{generatedClassSimpleName}} {
public class Send {

{{#handlers}}
/**
* @see {{originalClassFqcn}}#{{name}}
**/
public dev.restate.sdk.InvocationHandle<{{{boxedOutputFqcn}}}> {{handlersClassMethodName}}({{^inputEmpty}}{{{inputFqcn}}} req{{/inputEmpty}}) {
return ContextClient.this.ctx.send(
{{../handlersClass}}.{{handlersClassMethodName}}({{#if ../isKeyed}}ContextClient.this.key{{^inputEmpty}}, {{/inputEmpty}}{{/if}}{{^inputEmpty}}req{{/inputEmpty}})
);
}
/**
* @see {{originalClassFqcn}}#{{name}}
**/
public dev.restate.sdk.InvocationHandle<{{{boxedOutputFqcn}}}> {{handlersClassMethodName}}({{^inputEmpty}}{{{inputFqcn}}} req, {{/inputEmpty}}Consumer<dev.restate.common.RequestBuilder<{{{boxedInputFqcn}}}, {{{boxedOutputFqcn}}}>> requestBuilderApplier) {
var reqBuilder = {{../handlersClass}}.{{handlersClassMethodName}}({{#if ../isKeyed}}ContextClient.this.key{{^inputEmpty}}, {{/inputEmpty}}{{/if}}{{^inputEmpty}}req{{/inputEmpty}});
if (requestBuilderApplier != null) {
requestBuilderApplier.accept(reqBuilder);
}
return ContextClient.this.ctx.send(reqBuilder);
}
/**
* @see {{originalClassFqcn}}#{{name}}
**/
public dev.restate.sdk.InvocationHandle<{{{boxedOutputFqcn}}}> {{handlersClassMethodName}}({{^inputEmpty}}{{{inputFqcn}}} req, {{/inputEmpty}}Duration delay) {
return ContextClient.this.ctx.send(
{{../handlersClass}}.{{handlersClassMethodName}}({{#if ../isKeyed}}ContextClient.this.key{{^inputEmpty}}, {{/inputEmpty}}{{/if}}{{^inputEmpty}}req{{/inputEmpty}}), delay
);
}
/**
* @see {{originalClassFqcn}}#{{name}}
**/
public dev.restate.sdk.InvocationHandle<{{{boxedOutputFqcn}}}> {{handlersClassMethodName}}({{^inputEmpty}}{{{inputFqcn}}} req, {{/inputEmpty}}Duration delay, Consumer<dev.restate.common.RequestBuilder<{{{boxedInputFqcn}}}, {{{boxedOutputFqcn}}}>> requestBuilderApplier) {
var reqBuilder = {{../handlersClass}}.{{handlersClassMethodName}}({{#if ../isKeyed}}ContextClient.this.key{{^inputEmpty}}, {{/inputEmpty}}{{/if}}{{^inputEmpty}}req{{/inputEmpty}});
if (requestBuilderApplier != null) {
Expand All @@ -88,6 +120,7 @@ public class {{generatedClassSimpleName}} {
}
}

/** Ingress client for {@link {{originalClassFqcn}} } **/
public static class IngressClient {

private final dev.restate.client.Client client;
Expand All @@ -106,18 +139,33 @@ public class {{generatedClassSimpleName}} {
{{outputSerdeRef}});
}

/**
* Submit the workflow.
*
* @see {{originalClassFqcn}}#{{name}}
**/
public dev.restate.client.SendResponse<{{{boxedOutputFqcn}}}> submit({{^inputEmpty}}{{{inputFqcn}}} req{{/inputEmpty}}) {
return IngressClient.this.client.send(
{{../handlersClass}}.{{handlersClassMethodName}}({{#if ../isKeyed}}this.key{{^inputEmpty}}, {{/inputEmpty}}{{/if}}{{^inputEmpty}}req{{/inputEmpty}})
);
}

/**
* Submit the workflow.
*
* @see {{originalClassFqcn}}#{{name}}
**/
public dev.restate.client.SendResponse<{{{boxedOutputFqcn}}}> submit({{^inputEmpty}}{{{inputFqcn}}} req, {{/inputEmpty}}Duration delay) {
return IngressClient.this.client.send(
{{../handlersClass}}.{{handlersClassMethodName}}({{#if ../isKeyed}}this.key{{^inputEmpty}}, {{/inputEmpty}}{{/if}}{{^inputEmpty}}req{{/inputEmpty}}), delay
);
}

/**
* Submit the workflow.
*
* @see {{originalClassFqcn}}#{{name}}
**/
public dev.restate.client.SendResponse<{{{boxedOutputFqcn}}}> submit({{^inputEmpty}}{{{inputFqcn}}} req, {{/inputEmpty}}Consumer<dev.restate.common.RequestBuilder<{{{boxedInputFqcn}}}, {{{boxedOutputFqcn}}}>> requestBuilderApplier) {
var reqBuilder = {{../handlersClass}}.{{handlersClassMethodName}}({{#if ../isKeyed}}this.key{{^inputEmpty}}, {{/inputEmpty}}{{/if}}{{^inputEmpty}}req{{/inputEmpty}});
if (requestBuilderApplier != null) {
Expand All @@ -126,6 +174,11 @@ public class {{generatedClassSimpleName}} {
return IngressClient.this.client.send(reqBuilder);
}

/**
* Submit the workflow.
*
* @see {{originalClassFqcn}}#{{name}}
**/
public dev.restate.client.SendResponse<{{{boxedOutputFqcn}}}> submit({{^inputEmpty}}{{{inputFqcn}}} req, {{/inputEmpty}}Duration delay, Consumer<dev.restate.common.RequestBuilder<{{{boxedInputFqcn}}}, {{{boxedOutputFqcn}}}>> requestBuilderApplier) {
var reqBuilder = {{../handlersClass}}.{{handlersClassMethodName}}({{#if ../isKeyed}}this.key{{^inputEmpty}}, {{/inputEmpty}}{{/if}}{{^inputEmpty}}req{{/inputEmpty}});
if (requestBuilderApplier != null) {
Expand All @@ -134,18 +187,33 @@ public class {{generatedClassSimpleName}} {
return IngressClient.this.client.send(reqBuilder, delay);
}

/**
* Submit the workflow.
*
* @see {{originalClassFqcn}}#{{name}}
**/
public java.util.concurrent.CompletableFuture<dev.restate.client.SendResponse<{{{boxedOutputFqcn}}}>> submitAsync({{^inputEmpty}}{{{inputFqcn}}} req{{/inputEmpty}}) {
return IngressClient.this.client.sendAsync(
{{../handlersClass}}.{{handlersClassMethodName}}({{#if ../isKeyed}}this.key{{^inputEmpty}}, {{/inputEmpty}}{{/if}}{{^inputEmpty}}req{{/inputEmpty}})
);
}

/**
* Submit the workflow.
*
* @see {{originalClassFqcn}}#{{name}}
**/
public java.util.concurrent.CompletableFuture<dev.restate.client.SendResponse<{{{boxedOutputFqcn}}}>> submitAsync({{^inputEmpty}}{{{inputFqcn}}} req, {{/inputEmpty}} Duration delay) {
return IngressClient.this.client.sendAsync(
{{../handlersClass}}.{{handlersClassMethodName}}({{#if ../isKeyed}}this.key{{^inputEmpty}}, {{/inputEmpty}}{{/if}}{{^inputEmpty}}req{{/inputEmpty}}), delay
);
}

/**
* Submit the workflow.
*
* @see {{originalClassFqcn}}#{{name}}
**/
public java.util.concurrent.CompletableFuture<dev.restate.client.SendResponse<{{{boxedOutputFqcn}}}>> submitAsync({{^inputEmpty}}{{{inputFqcn}}} req, {{/inputEmpty}}Consumer<dev.restate.common.RequestBuilder<{{{boxedInputFqcn}}}, {{{boxedOutputFqcn}}}>> requestBuilderApplier) {
var reqBuilder = {{../handlersClass}}.{{handlersClassMethodName}}({{#if ../isKeyed}}this.key{{^inputEmpty}}, {{/inputEmpty}}{{/if}}{{^inputEmpty}}req{{/inputEmpty}});
if (requestBuilderApplier != null) {
Expand All @@ -154,6 +222,11 @@ public class {{generatedClassSimpleName}} {
return IngressClient.this.client.sendAsync(reqBuilder);
}

/**
* Submit the workflow.
*
* @see {{originalClassFqcn}}#{{name}}
**/
public java.util.concurrent.CompletableFuture<dev.restate.client.SendResponse<{{{boxedOutputFqcn}}}>> submitAsync({{^inputEmpty}}{{{inputFqcn}}} req, {{/inputEmpty}}Duration delay, Consumer<dev.restate.common.RequestBuilder<{{{boxedInputFqcn}}}, {{{boxedOutputFqcn}}}>> requestBuilderApplier) {
var reqBuilder = {{../handlersClass}}.{{handlersClassMethodName}}({{#if ../isKeyed}}this.key{{^inputEmpty}}, {{/inputEmpty}}{{/if}}{{^inputEmpty}}req{{/inputEmpty}});
if (requestBuilderApplier != null) {
Expand All @@ -162,11 +235,17 @@ public class {{generatedClassSimpleName}} {
return IngressClient.this.client.sendAsync(reqBuilder, delay);
}
{{else}}
/**
* @see {{originalClassFqcn}}#{{name}}
**/
public {{#if outputEmpty}}void{{else}}{{{outputFqcn}}}{{/if}} {{handlersClassMethodName}}({{^inputEmpty}}{{{inputFqcn}}} req{{/inputEmpty}}) {
{{^outputEmpty}}return {{/outputEmpty}}this.client.call(
{{../handlersClass}}.{{handlersClassMethodName}}({{#if ../isKeyed}}this.key{{^inputEmpty}}, {{/inputEmpty}}{{/if}}{{^inputEmpty}}req{{/inputEmpty}})
).response();
}
/**
* @see {{originalClassFqcn}}#{{name}}
**/
public {{#if outputEmpty}}void{{else}}{{{outputFqcn}}}{{/if}} {{handlersClassMethodName}}({{^inputEmpty}}{{{inputFqcn}}} req, {{/inputEmpty}}Consumer<dev.restate.common.RequestBuilder<{{{boxedInputFqcn}}}, {{{boxedOutputFqcn}}}>> requestBuilderApplier) {
var reqBuilder = {{../handlersClass}}.{{handlersClassMethodName}}({{#if ../isKeyed}}this.key{{^inputEmpty}}, {{/inputEmpty}}{{/if}}{{^inputEmpty}}req{{/inputEmpty}});
if (requestBuilderApplier != null) {
Expand All @@ -175,11 +254,17 @@ public class {{generatedClassSimpleName}} {
{{^outputEmpty}}return {{/outputEmpty}}this.client.call(reqBuilder.build()).response();
}

/**
* @see {{originalClassFqcn}}#{{name}}
**/
public {{#if outputEmpty}}java.util.concurrent.CompletableFuture<Void>{{else}}java.util.concurrent.CompletableFuture<{{{boxedOutputFqcn}}}>{{/if}} {{handlersClassMethodName}}Async({{^inputEmpty}}{{{inputFqcn}}} req{{/inputEmpty}}) {
return this.client.callAsync(
{{../handlersClass}}.{{handlersClassMethodName}}({{#if ../isKeyed}}this.key{{^inputEmpty}}, {{/inputEmpty}}{{/if}}{{^inputEmpty}}req{{/inputEmpty}})
).thenApply(dev.restate.client.Response::response);
}
/**
* @see {{originalClassFqcn}}#{{name}}
**/
public {{#if outputEmpty}}java.util.concurrent.CompletableFuture<Void>{{else}}java.util.concurrent.CompletableFuture<{{{boxedOutputFqcn}}}>{{/if}} {{handlersClassMethodName}}Async({{^inputEmpty}}{{{inputFqcn}}} req, {{/inputEmpty}}Consumer<dev.restate.common.RequestBuilder<{{{boxedInputFqcn}}}, {{{boxedOutputFqcn}}}>> requestBuilderApplier) {
var reqBuilder = {{../handlersClass}}.{{handlersClassMethodName}}({{#if ../isKeyed}}this.key{{^inputEmpty}}, {{/inputEmpty}}{{/if}}{{^inputEmpty}}req{{/inputEmpty}});
if (requestBuilderApplier != null) {
Expand All @@ -196,23 +281,35 @@ public class {{generatedClassSimpleName}} {
public class Send {

{{#handlers}}{{^isWorkflow}}
/**
* @see {{originalClassFqcn}}#{{name}}
**/
public dev.restate.client.SendResponse<{{{boxedOutputFqcn}}}> {{handlersClassMethodName}}({{^inputEmpty}}{{{inputFqcn}}} req{{/inputEmpty}}) {
return IngressClient.this.client.send(
{{../handlersClass}}.{{handlersClassMethodName}}({{#if ../isKeyed}}IngressClient.this.key{{^inputEmpty}}, {{/inputEmpty}}{{/if}}{{^inputEmpty}}req{{/inputEmpty}})
);
}
/**
* @see {{originalClassFqcn}}#{{name}}
**/
public dev.restate.client.SendResponse<{{{boxedOutputFqcn}}}> {{handlersClassMethodName}}({{^inputEmpty}}{{{inputFqcn}}} req, {{/inputEmpty}}Consumer<dev.restate.common.RequestBuilder<{{{boxedInputFqcn}}}, {{{boxedOutputFqcn}}}>> requestBuilderApplier) {
var reqBuilder = {{../handlersClass}}.{{handlersClassMethodName}}({{#if ../isKeyed}}IngressClient.this.key{{^inputEmpty}}, {{/inputEmpty}}{{/if}}{{^inputEmpty}}req{{/inputEmpty}});
if (requestBuilderApplier != null) {
requestBuilderApplier.accept(reqBuilder);
}
return IngressClient.this.client.send(reqBuilder);
}
/**
* @see {{originalClassFqcn}}#{{name}}
**/
public dev.restate.client.SendResponse<{{{boxedOutputFqcn}}}> {{handlersClassMethodName}}({{^inputEmpty}}{{{inputFqcn}}} req, {{/inputEmpty}}Duration delay) {
return IngressClient.this.client.send(
{{../handlersClass}}.{{handlersClassMethodName}}({{#if ../isKeyed}}IngressClient.this.key{{^inputEmpty}}, {{/inputEmpty}}{{/if}}{{^inputEmpty}}req{{/inputEmpty}}), delay
);
}
/**
* @see {{originalClassFqcn}}#{{name}}
**/
public dev.restate.client.SendResponse<{{{boxedOutputFqcn}}}> {{handlersClassMethodName}}({{^inputEmpty}}{{{inputFqcn}}} req, {{/inputEmpty}}Duration delay, Consumer<dev.restate.common.RequestBuilder<{{{boxedInputFqcn}}}, {{{boxedOutputFqcn}}}>> requestBuilderApplier) {
var reqBuilder = {{../handlersClass}}.{{handlersClassMethodName}}({{#if ../isKeyed}}IngressClient.this.key{{^inputEmpty}}, {{/inputEmpty}}{{/if}}{{^inputEmpty}}req{{/inputEmpty}});
if (requestBuilderApplier != null) {
Expand All @@ -221,23 +318,35 @@ public class {{generatedClassSimpleName}} {
return IngressClient.this.client.send(reqBuilder, delay);
}

/**
* @see {{originalClassFqcn}}#{{name}}
**/
public java.util.concurrent.CompletableFuture<dev.restate.client.SendResponse<{{{boxedOutputFqcn}}}>> {{handlersClassMethodName}}Async({{^inputEmpty}}{{{inputFqcn}}} req{{/inputEmpty}}) {
return IngressClient.this.client.sendAsync(
{{../handlersClass}}.{{handlersClassMethodName}}({{#if ../isKeyed}}IngressClient.this.key{{^inputEmpty}}, {{/inputEmpty}}{{/if}}{{^inputEmpty}}req{{/inputEmpty}})
);
}
/**
* @see {{originalClassFqcn}}#{{name}}
**/
public java.util.concurrent.CompletableFuture<dev.restate.client.SendResponse<{{{boxedOutputFqcn}}}>> {{handlersClassMethodName}}Async({{^inputEmpty}}{{{inputFqcn}}} req, {{/inputEmpty}}Consumer<dev.restate.common.RequestBuilder<{{{boxedInputFqcn}}}, {{{boxedOutputFqcn}}}>> requestBuilderApplier) {
var reqBuilder = {{../handlersClass}}.{{handlersClassMethodName}}({{#if ../isKeyed}}IngressClient.this.key{{^inputEmpty}}, {{/inputEmpty}}{{/if}}{{^inputEmpty}}req{{/inputEmpty}});
if (requestBuilderApplier != null) {
requestBuilderApplier.accept(reqBuilder);
}
return IngressClient.this.client.sendAsync(reqBuilder);
}
/**
* @see {{originalClassFqcn}}#{{name}}
**/
public java.util.concurrent.CompletableFuture<dev.restate.client.SendResponse<{{{boxedOutputFqcn}}}>> {{handlersClassMethodName}}Async({{^inputEmpty}}{{{inputFqcn}}} req, {{/inputEmpty}}Duration delay) {
return IngressClient.this.client.sendAsync(
{{../handlersClass}}.{{handlersClassMethodName}}({{#if ../isKeyed}}IngressClient.this.key{{^inputEmpty}}, {{/inputEmpty}}{{/if}}{{^inputEmpty}}req{{/inputEmpty}}), delay
);
}
/**
* @see {{originalClassFqcn}}#{{name}}
**/
public java.util.concurrent.CompletableFuture<dev.restate.client.SendResponse<{{{boxedOutputFqcn}}}>> {{handlersClassMethodName}}Async({{^inputEmpty}}{{{inputFqcn}}} req, {{/inputEmpty}}Duration delay, Consumer<dev.restate.common.RequestBuilder<{{{boxedInputFqcn}}}, {{{boxedOutputFqcn}}}>> requestBuilderApplier) {
var reqBuilder = {{../handlersClass}}.{{handlersClassMethodName}}({{#if ../isKeyed}}IngressClient.this.key{{^inputEmpty}}, {{/inputEmpty}}{{/if}}{{^inputEmpty}}req{{/inputEmpty}});
if (requestBuilderApplier != null) {
Expand Down
5 changes: 5 additions & 0 deletions sdk-api-gen/src/main/resources/templates/Handlers.hbs
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
{{#if originalClassPkg}}package {{originalClassPkg}};{{/if}}

/** Handler request factories for {@link {{originalClassFqcn}} } **/
@SuppressWarnings("unchecked")
public final class {{generatedClassSimpleName}} {

private {{generatedClassSimpleName}}() {}

{{#handlers}}
/**
* @see {{originalClassFqcn}}#{{name}}
**/
public static {{#if isWorkflow}}dev.restate.common.WorkflowRequestBuilder{{else}}dev.restate.common.RequestBuilder{{/if}}<{{{boxedInputFqcn}}}, {{{boxedOutputFqcn}}}> {{handlersClassMethodName}}({{#if ../isKeyed}}String key{{^inputEmpty}}, {{/inputEmpty}}{{/if}}{{^inputEmpty}}{{{inputFqcn}}} req{{/inputEmpty}}) {
return {{#if isWorkflow}}(dev.restate.common.WorkflowRequestBuilder){{/if}} dev.restate.common.Request.of(
{{{targetExpr this "key"}}},
Expand All @@ -16,6 +20,7 @@ public final class {{generatedClassSimpleName}} {

{{/handlers}}

/** Metadata for {@link {{originalClassFqcn}} } **/
public final static class Metadata {

public static final String SERVICE_NAME = "{{restateServiceName}}";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{{#if originalClassPkg}}package {{originalClassPkg}};{{/if}}

/** Service definition factory to bind {@link {{originalClassFqcn}} } **/
public class {{generatedClassSimpleName}} implements dev.restate.sdk.endpoint.definition.ServiceDefinitionFactory<{{originalClassFqcn}}> {

@java.lang.Override
Expand Down