Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 31 additions & 17 deletions internal/librarian/library.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,19 @@ var (
errNoExplicitOutput = errors.New("library requires an explicit output path")
)

// languageDefaultFillers maps a language to a function that fills
// language-specific library fields from the provided defaults.
var languageDefaultFillers = map[string]func(*config.Library, *config.Default) *config.Library{
config.LanguageDart: fillDart,
config.LanguageGo: fillGo,
config.LanguageJava: fillJava,
config.LanguagePython: fillPython,
config.LanguageRust: fillRust,
config.LanguageSwift: fillSwift,
}

// fillDefaults populates empty library fields from the provided defaults.
func fillDefaults(lib *config.Library, d *config.Default) *config.Library {
func fillDefaults(language string, lib *config.Library, d *config.Default) *config.Library {
if d == nil {
return lib
}
Expand All @@ -44,22 +55,10 @@ func fillDefaults(lib *config.Library, d *config.Default) *config.Library {
if lib.Output == "" {
lib.Output = d.Output
}
switch {
case d.Go != nil:
return fillGo(lib, d)
case d.Java != nil:
return fillJava(lib, d)
case d.Rust != nil:
return fillRust(lib, d)
case d.Dart != nil:
return fillDart(lib, d)
case d.Python != nil:
return fillPython(lib, d)
case d.Swift != nil:
return fillSwift(lib, d)
default:
return lib
if filler, ok := languageDefaultFillers[language]; ok {
return filler(lib, d)
}
return lib
}

// fillGo populates empty Go-specific fields in lib from the provided default.
Expand Down Expand Up @@ -99,6 +98,9 @@ func union(a, b []string) []string {

// fillJava populates empty Java-specific fields in lib from the provided default.
func fillJava(lib *config.Library, d *config.Default) *config.Library {
if d.Java == nil {
return lib
}
if lib.Java == nil {
lib.Java = &config.JavaModule{}
}
Expand All @@ -125,6 +127,9 @@ func fillGroupIDIfEmpty(lib *config.Library, d *config.Default) {

// fillRust populates empty Rust-specific fields in lib from the provided default.
func fillRust(lib *config.Library, d *config.Default) *config.Library {
if d.Rust == nil {
return lib
}
if lib.Rust == nil {
lib.Rust = &config.RustCrate{}
}
Expand Down Expand Up @@ -162,6 +167,9 @@ func fillRust(lib *config.Library, d *config.Default) *config.Library {
}

func fillDart(lib *config.Library, d *config.Default) *config.Library {
if d.Dart == nil {
return lib
}
if lib.Version == "" {
lib.Version = d.Dart.Version
}
Expand All @@ -184,6 +192,9 @@ func fillDart(lib *config.Library, d *config.Default) *config.Library {
// fillPython populates empty Python-specific fields in lib from the provided
// default.
func fillPython(lib *config.Library, d *config.Default) *config.Library {
if d.Python == nil {
return lib
}
if lib.Python == nil {
lib.Python = &config.PythonPackage{}
}
Expand All @@ -196,6 +207,9 @@ func fillPython(lib *config.Library, d *config.Default) *config.Library {

// fillSwift populates empty Swift-specific fields in lib from the provided default.
func fillSwift(lib *config.Library, d *config.Default) *config.Library {
if d.Swift == nil {
return lib
}
if lib.Swift == nil {
lib.Swift = &config.SwiftPackage{}
}
Expand Down Expand Up @@ -331,7 +345,7 @@ func applyDefaults(language string, lib *config.Library, defaults *config.Defaul
}
lib.Output = defaultOutput(language, lib.Name, apiPath, defaultOut)
}
return fillLibraryDefaults(language, fillDefaults(lib, defaults))
return fillLibraryDefaults(language, fillDefaults(language, lib, defaults))
}

// canDeriveAPIPath reports whether the language's library name contains enough information to
Expand Down
30 changes: 23 additions & 7 deletions internal/librarian/library_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import (
"github.com/googleapis/librarian/internal/config"
)

func TestFillDefaults(t *testing.T) {
func TestFillDefaults_Dart(t *testing.T) {
defaults := &config.Default{
Keep: []string{"CHANGES.md"},
Output: "src/generated/",
Expand Down Expand Up @@ -170,9 +170,25 @@ func TestFillDefaults(t *testing.T) {
},
},
},
} {
t.Run(test.name, func(t *testing.T) {
got := fillDefaults(config.LanguageDart, test.lib, test.defaults)
if diff := cmp.Diff(test.want, got); diff != "" {
t.Errorf("mismatch (-want +got):\n%s", diff)
}
})
}
}

func TestFillDefaults_Swift(t *testing.T) {
for _, test := range []struct {
name string
defaults *config.Default
lib *config.Library
want *config.Library
}{
{
name: "swift defaults",
defaults: &config.Default{
name: "swift defaults", defaults: &config.Default{
Swift: &config.SwiftDefault{
Dependencies: []config.SwiftDependency{
{Name: "wkt", URL: "https://github.com/googleapis/swift-protobuf"},
Expand Down Expand Up @@ -225,7 +241,7 @@ func TestFillDefaults(t *testing.T) {
},
} {
t.Run(test.name, func(t *testing.T) {
got := fillDefaults(test.lib, test.defaults)
got := fillDefaults(config.LanguageSwift, test.lib, test.defaults)
if diff := cmp.Diff(test.want, got); diff != "" {
t.Errorf("mismatch (-want +got):\n%s", diff)
}
Expand Down Expand Up @@ -600,7 +616,7 @@ func TestFillDefaults_Rust(t *testing.T) {
},
} {
t.Run(test.name, func(t *testing.T) {
got := fillDefaults(test.lib, defaults)
got := fillDefaults(config.LanguageRust, test.lib, defaults)
if diff := cmp.Diff(test.want, got); diff != "" {
t.Errorf("mismatch (-want +got):\n%s", diff)
}
Expand Down Expand Up @@ -706,7 +722,7 @@ func TestFillDefaults_Python(t *testing.T) {
defaults := &config.Default{
Python: test.defaults,
}
got := fillDefaults(test.lib, defaults)
got := fillDefaults(config.LanguagePython, test.lib, defaults)
if diff := cmp.Diff(test.want, got); diff != "" {
t.Errorf("mismatch (-want +got):\n%s", diff)
}
Expand Down Expand Up @@ -830,7 +846,7 @@ func TestFillDefaults_Go(t *testing.T) {
defaults := &config.Default{
Go: test.defaults,
}
got := fillDefaults(test.lib, defaults)
got := fillDefaults(config.LanguageGo, test.lib, defaults)
if diff := cmp.Diff(test.want, got); diff != "" {
t.Errorf("mismatch (-want +got):\n%s", diff)
}
Expand Down
Loading