Skip to content

Commit 6202a79

Browse files
authored
refactor(sidekick): introduce ModelOverride for configuration consistency (#4040)
- Replaces legacy map-based overrides (name, title, description, elements) with a structured ModelOverride struct. - "include-list" remains in ModelConfig.Source because its related to which sources are included. We may reconsider this in the future.
1 parent c7010d0 commit 6202a79

9 files changed

Lines changed: 190 additions & 124 deletions

File tree

internal/librarian/dart/codec.go

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121

2222
"github.com/googleapis/librarian/internal/config"
2323
"github.com/googleapis/librarian/internal/serviceconfig"
24+
"github.com/googleapis/librarian/internal/sidekick/api"
2425
"github.com/googleapis/librarian/internal/sidekick/parser"
2526
"github.com/googleapis/librarian/internal/sidekick/source"
2627
)
@@ -34,34 +35,38 @@ func toModelConfig(library *config.Library, ch *config.API, sources *source.Sour
3435

3536
src := addLibraryRoots(library, sources)
3637

37-
if library.DescriptionOverride != "" {
38-
src["description-override"] = library.DescriptionOverride
39-
}
40-
if library.Dart != nil && library.Dart.NameOverride != "" {
41-
src["name-override"] = library.Dart.NameOverride
42-
}
43-
if library.Dart != nil && library.Dart.TitleOverride != "" {
44-
src["title-override"] = library.Dart.TitleOverride
45-
}
4638
if library.Dart != nil && library.Dart.IncludeList != nil {
4739
src["include-list"] = strings.Join(library.Dart.IncludeList, ",")
4840
}
49-
5041
root := sources.Googleapis
5142
if ch.Path == "schema/google/showcase/v1beta1" {
5243
root = sources.Showcase
5344
}
54-
api, err := serviceconfig.Find(root, ch.Path, serviceconfig.LangDart)
45+
svcConfig, err := serviceconfig.Find(root, ch.Path, serviceconfig.LangDart)
5546
if err != nil {
5647
return nil, err
5748
}
5849

50+
title := svcConfig.Title
51+
var name string
52+
if library.Dart != nil {
53+
name = library.Dart.NameOverride
54+
if library.Dart.TitleOverride != "" {
55+
title = library.Dart.TitleOverride
56+
}
57+
}
58+
5959
modelConfig := &parser.ModelConfig{
6060
SpecificationFormat: config.SpecProtobuf,
61-
ServiceConfig: api.ServiceConfig,
61+
ServiceConfig: svcConfig.ServiceConfig,
6262
SpecificationSource: ch.Path,
6363
Source: src,
6464
Codec: buildCodec(library),
65+
Override: api.ModelOverride{
66+
Name: name,
67+
Description: library.DescriptionOverride,
68+
Title: title,
69+
},
6570
}
6671
return modelConfig, nil
6772
}

internal/librarian/dart/codec_test.go

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020

2121
"github.com/google/go-cmp/cmp"
2222
"github.com/googleapis/librarian/internal/config"
23+
"github.com/googleapis/librarian/internal/sidekick/api"
2324
"github.com/googleapis/librarian/internal/sidekick/parser"
2425
"github.com/googleapis/librarian/internal/sidekick/source"
2526
)
@@ -294,13 +295,13 @@ func TestToModelConfig(t *testing.T) {
294295
googleapisDir: googleapisDir,
295296
want: &parser.ModelConfig{
296297
SpecificationFormat: config.SpecProtobuf,
297-
ServiceConfig: "",
298298
SpecificationSource: "google/api/apikeys/v2",
299299
Source: map[string]string{
300300
"googleapis-root": googleapisDir,
301301
"roots": "googleapis",
302302
},
303-
Codec: map[string]string{},
303+
Codec: map[string]string{},
304+
Override: api.ModelOverride{},
304305
},
305306
},
306307
{
@@ -314,14 +315,15 @@ func TestToModelConfig(t *testing.T) {
314315
googleapisDir: googleapisDir,
315316
want: &parser.ModelConfig{
316317
SpecificationFormat: config.SpecProtobuf,
317-
ServiceConfig: "",
318318
SpecificationSource: "google/api/apikeys/v2",
319319
Source: map[string]string{
320-
"googleapis-root": googleapisDir,
321-
"description-override": "this is a description override",
322-
"roots": "googleapis",
320+
"googleapis-root": googleapisDir,
321+
"roots": "googleapis",
323322
},
324323
Codec: map[string]string{},
324+
Override: api.ModelOverride{
325+
Description: "this is a description override",
326+
},
325327
},
326328
},
327329
{
@@ -337,14 +339,15 @@ func TestToModelConfig(t *testing.T) {
337339
googleapisDir: googleapisDir,
338340
want: &parser.ModelConfig{
339341
SpecificationFormat: config.SpecProtobuf,
340-
ServiceConfig: "",
341342
SpecificationSource: "google/api/apikeys/v2",
342343
Source: map[string]string{
343344
"googleapis-root": googleapisDir,
344-
"name-override": "override-name",
345345
"roots": "googleapis",
346346
},
347347
Codec: map[string]string{},
348+
Override: api.ModelOverride{
349+
Name: "override-name",
350+
},
348351
},
349352
},
350353
{
@@ -380,12 +383,13 @@ func TestToModelConfig(t *testing.T) {
380383
googleapisDir: googleapisDir,
381384
want: &parser.ModelConfig{
382385
SpecificationFormat: config.SpecProtobuf,
383-
ServiceConfig: "",
384386
SpecificationSource: "google/api/apikeys/v2",
385387
Source: map[string]string{
386388
"googleapis-root": googleapisDir,
387389
"roots": "googleapis",
388-
"title-override": "library-title-override",
390+
},
391+
Override: api.ModelOverride{
392+
Title: "library-title-override",
389393
},
390394
Codec: map[string]string{
391395
"api-keys-environment-variables": "GOOGLE_API_KEY",

internal/librarian/rust/codec.go

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020

2121
"github.com/googleapis/librarian/internal/config"
2222
"github.com/googleapis/librarian/internal/serviceconfig"
23+
"github.com/googleapis/librarian/internal/sidekick/api"
2324
sidekickconfig "github.com/googleapis/librarian/internal/sidekick/config"
2425
"github.com/googleapis/librarian/internal/sidekick/parser"
2526
"github.com/googleapis/librarian/internal/sidekick/source"
@@ -32,27 +33,21 @@ func libraryToModelConfig(library *config.Library, ch *config.API, sources *sour
3233
}
3334

3435
src := addLibraryRoots(library, sources)
35-
if library.DescriptionOverride != "" {
36-
src["description-override"] = library.DescriptionOverride
37-
}
3836
root := sources.Googleapis
3937
if ch.Path == "schema/google/showcase/v1beta1" {
4038
root = sources.Showcase
4139
}
42-
api, err := serviceconfig.Find(root, ch.Path, serviceconfig.LangRust)
40+
svcConfig, err := serviceconfig.Find(root, ch.Path, serviceconfig.LangRust)
4341
if err != nil {
4442
return nil, err
4543
}
46-
if api.Title != "" {
47-
src["title-override"] = api.Title
48-
}
4944

5045
var specSource string
5146
switch specFormat {
5247
case config.SpecDiscovery:
53-
specSource = api.Discovery
48+
specSource = svcConfig.Discovery
5449
case config.SpecOpenAPI:
55-
specSource = api.OpenAPI
50+
specSource = svcConfig.OpenAPI
5651
default:
5752
specSource = ch.Path
5853
}
@@ -62,13 +57,17 @@ func libraryToModelConfig(library *config.Library, ch *config.API, sources *sour
6257
SpecificationFormat: specFormat,
6358
SpecificationSource: specSource,
6459
Source: src,
65-
ServiceConfig: api.ServiceConfig,
60+
ServiceConfig: svcConfig.ServiceConfig,
6661
Codec: buildCodec(library),
62+
Override: api.ModelOverride{
63+
Description: library.DescriptionOverride,
64+
Title: svcConfig.Title,
65+
},
6766
}
6867

6968
if library.Rust != nil {
7069
if len(library.Rust.SkippedIds) > 0 {
71-
src["skipped-ids"] = strings.Join(library.Rust.SkippedIds, ",")
70+
modelCfg.Override.SkippedIDs = library.Rust.SkippedIds
7271
}
7372
if len(library.Rust.DocumentationOverrides) > 0 {
7473
modelCfg.CommentOverrides = make([]sidekickconfig.DocumentationOverride, len(library.Rust.DocumentationOverrides))
@@ -222,22 +221,14 @@ func formatPackageDependency(dep *config.RustPackageDependency) string {
222221

223222
func moduleToModelConfig(library *config.Library, module *config.RustModule, sources *source.Sources) (*parser.ModelConfig, error) {
224223
src := addLibraryRoots(library, sources)
225-
if len(module.IncludedIds) > 0 {
226-
src["included-ids"] = strings.Join(module.IncludedIds, ",")
227-
}
228-
if len(module.SkippedIds) > 0 {
229-
src["skipped-ids"] = strings.Join(module.SkippedIds, ",")
230-
}
231-
if module.IncludeList != "" {
232-
src["include-list"] = module.IncludeList
233-
}
224+
var title string
234225
if module.Source != "" && src["roots"] == "googleapis" {
235226
api, err := serviceconfig.Find(sources.Googleapis, module.Source, serviceconfig.LangRust)
236227
if err != nil {
237228
return nil, fmt.Errorf("failed to find service config for %q: %w", module.Source, err)
238229
}
239230
if api != nil && api.Title != "" {
240-
src["title-override"] = api.Title
231+
title = api.Title
241232
}
242233
}
243234

@@ -252,13 +243,21 @@ func moduleToModelConfig(library *config.Library, module *config.RustModule, sou
252243
if module.SpecificationFormat != "" {
253244
specificationFormat = module.SpecificationFormat
254245
}
246+
if module.IncludeList != "" {
247+
src["include-list"] = module.IncludeList
248+
}
255249
modelCfg := &parser.ModelConfig{
256250
Language: language,
257251
SpecificationFormat: specificationFormat,
258252
ServiceConfig: module.ServiceConfig,
259253
SpecificationSource: module.Source,
260254
Source: src,
261255
Codec: buildModuleCodec(library, module),
256+
Override: api.ModelOverride{
257+
Title: title,
258+
IncludedIDs: module.IncludedIds,
259+
SkippedIDs: module.SkippedIds,
260+
},
262261
}
263262
if len(module.DocumentationOverrides) > 0 {
264263
modelCfg.CommentOverrides = make([]sidekickconfig.DocumentationOverride, len(module.DocumentationOverrides))

0 commit comments

Comments
 (0)