Skip to content

Commit 042546c

Browse files
committed
fix: add generics to Binding type
Signed-off-by: Alex Tennant <atennant@skedulo.com> Fixes: #487 Signed-off-by: Alex Tennant <atennant@skedulo.com>
1 parent 8357719 commit 042546c

File tree

3 files changed

+12
-12
lines changed

3 files changed

+12
-12
lines changed

Diff for: src/message/index.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@ export * from "./mqtt";
2222
* @property {@link Deserializer} `toEvent` - converts a Message into a CloudEvent
2323
* @property {@link Detector} `isEvent` - determines if a Message can be converted to a CloudEvent
2424
*/
25-
export interface Binding {
26-
binary: Serializer;
27-
structured: Serializer;
25+
export interface Binding<B extends Message = Message, S extends Message = Message> {
26+
binary: Serializer<B>;
27+
structured: Serializer<S>;
2828
toEvent: Deserializer;
2929
isEvent: Detector;
3030
}
@@ -65,8 +65,8 @@ export enum Mode {
6565
* CloudEvent into a Message.
6666
* @interface
6767
*/
68-
export interface Serializer {
69-
<T>(event: CloudEventV1<T>): Message;
68+
export interface Serializer<M extends Message> {
69+
<T>(event: CloudEventV1<T>): M;
7070
}
7171

7272
/**

Diff for: src/message/kafka/index.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ export type {
2222
* Bindings for Kafka transport
2323
* @implements {@linkcode Binding}
2424
*/
25-
const Kafka: Binding = {
25+
const Kafka: Binding<KafkaMessage<unknown>, KafkaMessage<string>> = {
2626
binary: toBinaryKafkaMessage,
2727
structured: toStructuredKafkaMessage,
2828
toEvent: deserializeKafkaMessage,
@@ -35,9 +35,9 @@ type Key = string | Buffer;
3535
* Extends the base Message type to include
3636
* Kafka-specific fields
3737
*/
38-
interface KafkaMessage<T = string> extends Message {
38+
interface KafkaMessage<T = string | Buffer | unknown> extends Message {
3939
key: Key
40-
value: T | string | Buffer | unknown
40+
value: T
4141
timestamp?: string
4242
}
4343

@@ -61,7 +61,7 @@ interface KafkaEvent<T> extends CloudEventV1<T> {
6161
* @param {KafkaEvent<T>} event The event to serialize
6262
* @returns {KafkaMessage<T>} a KafkaMessage instance
6363
*/
64-
function toBinaryKafkaMessage<T>(event: CloudEventV1<T>): KafkaMessage<T> {
64+
function toBinaryKafkaMessage<T>(event: CloudEventV1<T>): KafkaMessage<T | undefined> {
6565
// 3.2.1. Content Type
6666
// For the binary mode, the header content-type property MUST be mapped directly
6767
// to the CloudEvents datacontenttype attribute.
@@ -86,7 +86,7 @@ function toBinaryKafkaMessage<T>(event: CloudEventV1<T>): KafkaMessage<T> {
8686
* @param {CloudEvent<T>} event the CloudEvent to be serialized
8787
* @returns {KafkaMessage<T>} a KafkaMessage instance
8888
*/
89-
function toStructuredKafkaMessage<T>(event: CloudEventV1<T>): KafkaMessage<T> {
89+
function toStructuredKafkaMessage<T>(event: CloudEventV1<T>): KafkaMessage<string> {
9090
if ((event instanceof CloudEvent) && event.data_base64) {
9191
// The event's data is binary - delete it
9292
event = event.cloneWith({ data: undefined });

Diff for: src/message/mqtt/index.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ export type { MQTTMessage };
1515
* Extends the base {@linkcode Message} interface to include MQTT attributes, some of which
1616
* are aliases of the {Message} attributes.
1717
*/
18-
interface MQTTMessage<T> extends Message<T> {
18+
interface MQTTMessage<T = unknown> extends Message<T> {
1919
/**
2020
* Identifies this message as a PUBLISH packet. MQTTMessages created with
2121
* the `binary` and `structured` Serializers will contain a "Content Type"
@@ -37,7 +37,7 @@ interface MQTTMessage<T> extends Message<T> {
3737
* Binding for MQTT transport support
3838
* @implements @linkcode Binding
3939
*/
40-
const MQTT: Binding = {
40+
const MQTT: Binding<MQTTMessage, MQTTMessage> = {
4141
binary,
4242
structured,
4343
toEvent: toEvent as Deserializer,

0 commit comments

Comments
 (0)