Skip to content

Commit 0dea73f

Browse files
authored
[Schema Registry Avro] make schema group optional (#17922)
* [Schema Registry Avro] make schema group optional * update the changelog * address feedback
1 parent 3ebdf60 commit 0dea73f

6 files changed

Lines changed: 21 additions & 14 deletions

File tree

sdk/schemaregistry/schema-registry-avro/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66

77
### Breaking Changes
88

9+
- `schemaGroup` is no longer a constructor parameter and has been moved to the constructor options because it is only required for serialization.
10+
911
### Bugs Fixed
1012

1113
### Other Changes

sdk/schemaregistry/schema-registry-avro/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ const { SchemaRegistryClient } = require("@azure/schema-registry");
7171
const { SchemaRegistryAvroSerializer } = require("@azure/schema-registry-avro");
7272

7373
const client = new SchemaRegistryClient("<endpoint>", new DefaultAzureCredential());
74-
const serializer = new SchemaRegistryAvroSerializer(client, "<group>");
74+
const serializer = new SchemaRegistryAvroSerializer(client, { groupName: "<group>" });
7575

7676
// Example Avro schema
7777
const schema = JSON.stringify({

sdk/schemaregistry/schema-registry-avro/review/schema-registry-avro.api.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,15 @@ import { SchemaRegistry } from '@azure/schema-registry';
1010

1111
// @public
1212
export class SchemaRegistryAvroSerializer {
13-
constructor(client: SchemaRegistry, groupName: string, options?: SchemaRegistryAvroSerializerOptions);
13+
constructor(client: SchemaRegistry, options?: SchemaRegistryAvroSerializerOptions);
1414
deserialize(input: Buffer | Blob | Uint8Array): Promise<unknown>;
1515
serialize(value: unknown, schema: string): Promise<Uint8Array>;
1616
}
1717

1818
// @public
1919
export interface SchemaRegistryAvroSerializerOptions {
2020
autoRegisterSchemas?: boolean;
21+
groupName?: string;
2122
}
2223

2324
// (No @packageDocumentation comment for this package)

sdk/schemaregistry/schema-registry-avro/samples-dev/schemaRegistryAvroSample.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ export async function main() {
6060
await client.registerSchema(schemaDescription);
6161

6262
// Create a new serializer backed by the client
63-
const serializer = new SchemaRegistryAvroSerializer(client, groupName);
63+
const serializer = new SchemaRegistryAvroSerializer(client, { groupName });
6464

6565
// serialize an object that matches the schema
6666
const value: User = { firstName: "Jane", lastName: "Doe" };

sdk/schemaregistry/schema-registry-avro/src/schemaRegistryAvroSerializer.ts

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,11 @@ export interface SchemaRegistryAvroSerializerOptions {
5454
* Automatic schema registration is NOT recommended for production scenarios.
5555
*/
5656
autoRegisterSchemas?: boolean;
57+
/**
58+
* The group name to be used when registering/looking up a schema. Must be specified
59+
* if you will be calling `serialize`.
60+
*/
61+
groupName?: string;
5762
}
5863

5964
/**
@@ -66,21 +71,14 @@ export class SchemaRegistryAvroSerializer {
6671
*
6772
* @param client - Schema Registry where schemas are registered and obtained.
6873
* Usually this is a SchemaRegistryClient instance.
69-
*
70-
* @param groupName - The schema group to use when making requests to the
71-
* registry.
7274
*/
73-
constructor(
74-
client: SchemaRegistry,
75-
groupName: string,
76-
options?: SchemaRegistryAvroSerializerOptions
77-
) {
75+
constructor(client: SchemaRegistry, options?: SchemaRegistryAvroSerializerOptions) {
7876
this.registry = client;
79-
this.schemaGroup = groupName;
77+
this.schemaGroup = options?.groupName;
8078
this.autoRegisterSchemas = options?.autoRegisterSchemas ?? false;
8179
}
8280

83-
private readonly schemaGroup: string;
81+
private readonly schemaGroup?: string;
8482
private readonly registry: SchemaRegistry;
8583
private readonly autoRegisterSchemas: boolean;
8684

@@ -190,6 +188,12 @@ export class SchemaRegistryAvroSerializer {
190188
throw new Error("Schema must have a name.");
191189
}
192190

191+
if (!this.schemaGroup) {
192+
throw new Error(
193+
"Schema group must have been specified in the constructor options when the client was created in order to serialize."
194+
);
195+
}
196+
193197
const description: SchemaDescription = {
194198
groupName: this.schemaGroup,
195199
name: avroType.name,

sdk/schemaregistry/schema-registry-avro/test/utils/mockedSerializer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ export async function createTestSerializer(
1313
if (!autoRegisterSchemas) {
1414
await registerTestSchema(registry);
1515
}
16-
return new SchemaRegistryAvroSerializer(registry, testGroup, { autoRegisterSchemas });
16+
return new SchemaRegistryAvroSerializer(registry, { autoRegisterSchemas, groupName: testGroup });
1717
}
1818

1919
export async function registerTestSchema(registry: SchemaRegistry): Promise<string> {

0 commit comments

Comments
 (0)