import { makeStreamClient } from "https://deno.land/x/enzastdlib@v0.0.4/rpc-streams/client.ts";
Makes a Streams API client that can communicate to a server in enzastdlib's RPC protocol.
Examples
add.schema.ts
add.schema.ts
import type { JSONSchema, typeofschema } from 'https://deno.land/x/enzastdlib/schema/mod.ts';
export const SCHEMA_ADD_PARAMETERS = {
type: 'object',
required: ['a', 'b'],
additionalProperties: false,
properties: {
a: {
type: 'number',
},
b: {
type: 'number',
},
},
} as const satisfies JSONSchema;
export type AddParametersType = typeofschema<typeof SCHEMA_ADD_PARAMETERS>;
export const SCHEMA_ADD_RETURN = {
type: 'object',
required: ['sum'],
additionalProperties: false,
properties: {
sum: {
type: 'number',
},
},
} as const satisfies JSONSchema;
export type AddReturnType = typeofschema<typeof SCHEMA_ADD_RETURN>;
add.procedure.ts
import type { Procedure } from 'https://deno.land/x/enzastdlib/rpc-protocol/mod.ts';
import { parametersschema, resultschema } from 'https://deno.land/x/enzastdlib/rpc-protocol/mod.ts';
import type { AddParametersType, AddReturnType } from './add.schema.ts';
import { SCHEMA_ADD_PARAMETERS, SCHEMA_ADD_RETURN } from './add.schema.ts';
parametersschema(add, SCHEMA_ADD_PARAMETERS);
resultschema(add, SCHEMA_ADD_RETURN);
export function add(
_payload: Procedure,
parameters: AddParametersType,
): AddReturnType {
const { a, b } = parameters;
return {
sum: a + b,
};
}
mod.ts
import { assertEquals } from 'https://deno.land/std/testing/asserts.ts';
import { makeStreamClient } from 'https://deno.land/x/enzastdlib/rpc-streams/mod.ts';
import type { add } from './add.procedure.ts';
type MyRPCProcedures = { add: typeof add };
const client = makeStreamClient<MyRPCProcedures>({
// NOTE: We are assuming this client is being made in the scope of a
// running child process.
readable: Deno.stdin.readable,
writable: Deno.stdout.writable,
});
const result = await client.procedures.add({ a: 1, b: 2 });
assertEquals(result, { sum: 3 });
Type Parameters
optional
Procedures extends ProcedureRecord = EmptyObjectoptional
Notifications extends NotificationRecord = EmptyObjectParameters
options: StreamClientOptions