Skip to content

Commit 8a2873c

Browse files
authored
add SerdeContext base class (#1738)
1 parent a6843af commit 8a2873c

File tree

11 files changed

+58
-43
lines changed

11 files changed

+58
-43
lines changed

.changeset/popular-squids-lick.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@smithy/core": minor
3+
---
4+
5+
implement SerdeContext base class

packages/core/src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@ export * from "./middleware-http-auth-scheme";
33
export * from "./middleware-http-signing";
44
export * from "./normalizeProvider";
55
export { createPaginator } from "./pagination/createPaginator";
6-
export * from "./protocols/requestBuilder";
6+
export * from "./request-builder/requestBuilder";
77
export * from "./setFeature";
88
export * from "./util-identity-and-auth";

packages/core/src/submodules/cbor/CborCodec.ts

Lines changed: 5 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1+
import { SerdeContext } from "@smithy/core/protocols";
12
import { NormalizedSchema } from "@smithy/core/schema";
23
import { _parseEpochTimestamp, generateIdempotencyToken } from "@smithy/core/serde";
3-
import type { Codec, Schema, SerdeFunctions, ShapeDeserializer, ShapeSerializer } from "@smithy/types";
4+
import type { Codec, Schema, ShapeDeserializer, ShapeSerializer } from "@smithy/types";
45
import { fromBase64 } from "@smithy/util-base64";
56

67
import { cbor } from "./cbor";
@@ -9,9 +10,7 @@ import { dateToTag } from "./parseCborBody";
910
/**
1011
* @alpha
1112
*/
12-
export class CborCodec implements Codec<Uint8Array, Uint8Array> {
13-
private serdeContext?: SerdeFunctions;
14-
13+
export class CborCodec extends SerdeContext implements Codec<Uint8Array, Uint8Array> {
1514
public createSerializer(): CborShapeSerializer {
1615
const serializer = new CborShapeSerializer();
1716
serializer.setSerdeContext(this.serdeContext!);
@@ -23,23 +22,14 @@ export class CborCodec implements Codec<Uint8Array, Uint8Array> {
2322
deserializer.setSerdeContext(this.serdeContext!);
2423
return deserializer;
2524
}
26-
27-
public setSerdeContext(serdeContext: SerdeFunctions): void {
28-
this.serdeContext = serdeContext;
29-
}
3025
}
3126

3227
/**
3328
* @alpha
3429
*/
35-
export class CborShapeSerializer implements ShapeSerializer {
36-
private serdeContext?: SerdeFunctions;
30+
export class CborShapeSerializer extends SerdeContext implements ShapeSerializer {
3731
private value: unknown;
3832

39-
public setSerdeContext(serdeContext: SerdeFunctions) {
40-
this.serdeContext = serdeContext;
41-
}
42-
4333
public write(schema: Schema, value: unknown): void {
4434
this.value = this.serialize(schema, value);
4535
}
@@ -127,13 +117,7 @@ export class CborShapeSerializer implements ShapeSerializer {
127117
/**
128118
* @alpha
129119
*/
130-
export class CborShapeDeserializer implements ShapeDeserializer {
131-
private serdeContext?: SerdeFunctions;
132-
133-
public setSerdeContext(serdeContext: SerdeFunctions) {
134-
this.serdeContext = serdeContext;
135-
}
136-
120+
export class CborShapeDeserializer extends SerdeContext implements ShapeDeserializer {
137121
public read(schema: Schema, bytes: Uint8Array): any {
138122
const data: any = cbor.deserialize(bytes);
139123
return this.readValue(schema, data);

packages/core/src/submodules/protocols/HttpProtocol.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,21 +21,24 @@ import type {
2121
ShapeSerializer,
2222
} from "@smithy/types";
2323

24+
import { SerdeContext } from "./SerdeContext";
25+
2426
/**
2527
* Abstract base for HTTP-based client protocols.
2628
*
2729
* @alpha
2830
*/
29-
export abstract class HttpProtocol implements ClientProtocol<IHttpRequest, IHttpResponse> {
31+
export abstract class HttpProtocol extends SerdeContext implements ClientProtocol<IHttpRequest, IHttpResponse> {
3032
protected abstract serializer: ShapeSerializer<string | Uint8Array>;
3133
protected abstract deserializer: ShapeDeserializer<string | Uint8Array>;
32-
protected serdeContext?: SerdeFunctions;
3334

3435
protected constructor(
3536
public readonly options: {
3637
defaultNamespace: string;
3738
}
38-
) {}
39+
) {
40+
super();
41+
}
3942

4043
public abstract getShapeId(): string;
4144

@@ -49,6 +52,9 @@ export abstract class HttpProtocol implements ClientProtocol<IHttpRequest, IHttp
4952
return HttpResponse;
5053
}
5154

55+
/**
56+
* @override
57+
*/
5258
public setSerdeContext(serdeContext: SerdeFunctions): void {
5359
this.serdeContext = serdeContext;
5460
this.serializer.setSerdeContext(serdeContext);
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import type { ConfigurableSerdeContext, SerdeFunctions } from "@smithy/types";
2+
3+
/**
4+
* @internal
5+
*/
6+
export abstract class SerdeContext implements ConfigurableSerdeContext {
7+
protected serdeContext?: SerdeFunctions;
8+
9+
public setSerdeContext(serdeContext: SerdeFunctions): void {
10+
this.serdeContext = serdeContext;
11+
}
12+
}

packages/core/src/submodules/protocols/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,4 @@ export * from "./serde/HttpInterceptingShapeDeserializer";
1010
export * from "./serde/HttpInterceptingShapeSerializer";
1111
export * from "./serde/ToStringShapeSerializer";
1212
export * from "./serde/determineTimestampFormat";
13+
export * from "./SerdeContext";

packages/core/src/submodules/protocols/serde/FromStringShapeDeserializer.ts

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import {
1010
import type {
1111
CodecSettings,
1212
Schema,
13-
SerdeFunctions,
1413
ShapeDeserializer,
1514
TimestampDateTimeSchema,
1615
TimestampEpochSecondsSchema,
@@ -19,20 +18,17 @@ import type {
1918
import { fromBase64 } from "@smithy/util-base64";
2019
import { toUtf8 } from "@smithy/util-utf8";
2120

21+
import { SerdeContext } from "../SerdeContext";
2222
import { determineTimestampFormat } from "./determineTimestampFormat";
2323

2424
/**
2525
* This deserializer reads strings.
2626
*
2727
* @alpha
2828
*/
29-
export class FromStringShapeDeserializer implements ShapeDeserializer<string> {
30-
private serdeContext: SerdeFunctions | undefined;
31-
32-
public constructor(private settings: CodecSettings) {}
33-
34-
public setSerdeContext(serdeContext: SerdeFunctions): void {
35-
this.serdeContext = serdeContext;
29+
export class FromStringShapeDeserializer extends SerdeContext implements ShapeDeserializer<string> {
30+
public constructor(private settings: CodecSettings) {
31+
super();
3632
}
3733

3834
public read(_schema: Schema, data: string): any {

packages/core/src/submodules/protocols/serde/HttpInterceptingShapeDeserializer.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { NormalizedSchema } from "@smithy/core/schema";
22
import type { CodecSettings, Schema, SerdeFunctions, ShapeDeserializer } from "@smithy/types";
33
import { fromUtf8, toUtf8 } from "@smithy/util-utf8";
44

5+
import { SerdeContext } from "../SerdeContext";
56
import { FromStringShapeDeserializer } from "./FromStringShapeDeserializer";
67

78
/**
@@ -14,18 +15,22 @@ import { FromStringShapeDeserializer } from "./FromStringShapeDeserializer";
1415
* @alpha
1516
*/
1617
export class HttpInterceptingShapeDeserializer<CodecShapeDeserializer extends ShapeDeserializer<any>>
18+
extends SerdeContext
1719
implements ShapeDeserializer<string | Uint8Array>
1820
{
1921
private stringDeserializer: FromStringShapeDeserializer;
20-
private serdeContext: SerdeFunctions | undefined;
2122

2223
public constructor(
2324
private codecDeserializer: CodecShapeDeserializer,
2425
codecSettings: CodecSettings
2526
) {
27+
super();
2628
this.stringDeserializer = new FromStringShapeDeserializer(codecSettings);
2729
}
2830

31+
/**
32+
* @override
33+
*/
2934
public setSerdeContext(serdeContext: SerdeFunctions): void {
3035
this.stringDeserializer.setSerdeContext(serdeContext);
3136
this.codecDeserializer.setSerdeContext(serdeContext);

packages/core/src/submodules/protocols/serde/HttpInterceptingShapeSerializer.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
import { NormalizedSchema } from "@smithy/core/schema";
2-
import type { CodecSettings, Schema as ISchema, SerdeFunctions, ShapeSerializer } from "@smithy/types";
2+
import type {
3+
CodecSettings,
4+
ConfigurableSerdeContext,
5+
Schema as ISchema,
6+
SerdeFunctions,
7+
ShapeSerializer,
8+
} from "@smithy/types";
39

410
import { ToStringShapeSerializer } from "./ToStringShapeSerializer";
511

@@ -13,7 +19,7 @@ import { ToStringShapeSerializer } from "./ToStringShapeSerializer";
1319
* @alpha
1420
*/
1521
export class HttpInterceptingShapeSerializer<CodecShapeSerializer extends ShapeSerializer<string | Uint8Array>>
16-
implements ShapeSerializer<string | Uint8Array>
22+
implements ShapeSerializer<string | Uint8Array>, ConfigurableSerdeContext
1723
{
1824
private buffer: string | undefined;
1925

@@ -23,6 +29,9 @@ export class HttpInterceptingShapeSerializer<CodecShapeSerializer extends ShapeS
2329
private stringSerializer = new ToStringShapeSerializer(codecSettings)
2430
) {}
2531

32+
/**
33+
* @override
34+
*/
2635
public setSerdeContext(serdeContext: SerdeFunctions): void {
2736
this.codecSerializer.setSerdeContext(serdeContext);
2837
this.stringSerializer.setSerdeContext(serdeContext);

0 commit comments

Comments
 (0)