Skip to content

Commit 142ea31

Browse files
authored
Merge pull request #3 from submodule-org/feat/variadic-modifiable
Feat/variadic modifiable
2 parents e0d9c4c + fb922c6 commit 142ea31

4 files changed

Lines changed: 61 additions & 3 deletions

File tree

.github/workflows/go-test.yml

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
name: Go Test
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
pull_request:
8+
branches:
9+
- main
10+
11+
jobs:
12+
test:
13+
runs-on: ubuntu-latest
14+
15+
steps:
16+
- name: Checkout repository
17+
uses: actions/checkout@v2
18+
19+
- name: Set up Go
20+
uses: actions/setup-go@v2
21+
with:
22+
go-version: 1.22
23+
24+
- name: Install dependencies
25+
run: go mod tidy
26+
27+
- name: Run tests
28+
run: go test ./... -v

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# Managing dependency with Submodule
22

3+
![Go Test](https://github.com/submodule-org/submodule.go/actions/workflows/go-test.yml/badge.svg)
34
![common case](common-case.png "Common case")
45

56
Does the demonstrated diagram look familiar to you? A lot of applications will look just like so.

modifiable.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import "reflect"
77
// That'll help the submodule to be way easier to reconfigure (for example, sharing loggers) without missing the default settings
88
type ModifiableSubmodule[T any] interface {
99
Submodule[T]
10-
Append(submodule Retrievable)
10+
Append(submodule ...Retrievable)
1111
Reset()
1212
}
1313

@@ -60,8 +60,11 @@ func (m *modifiableSubmodule[T]) retrieve(s Scope) (any, error) {
6060
return m.submodule.retrieve(s)
6161
}
6262

63-
func (m *modifiableSubmodule[T]) Append(submodule Retrievable) {
64-
m.modifiers = append(m.modifiers, submodule)
63+
func (m *modifiableSubmodule[T]) Append(submodule ...Retrievable) {
64+
if len(submodule) == 0 {
65+
return
66+
}
67+
m.modifiers = append(m.modifiers, submodule...)
6568
}
6669

6770
func (m *modifiableSubmodule[T]) Reset() {

submodule_test.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,33 @@ func TestModuleFunction(t *testing.T) {
330330
require.Nil(t, e)
331331
require.Equal(t, 8, z)
332332
})
333+
t.Run("use variadic modifiable submodule", func(t *testing.T) {
334+
type (
335+
num1 int
336+
num2 int
337+
)
338+
x := submodule.Value[num1](0)
339+
y := submodule.Value[num2](0)
333340

341+
s := submodule.CreateScope()
342+
343+
type nums struct {
344+
x num1
345+
y num2
346+
}
347+
348+
m := submodule.MakeModifiable[nums](func(x num1, y num2) nums {
349+
return nums{x, y}
350+
}, x, y)
351+
352+
m.Append(
353+
submodule.Value[num1](1),
354+
submodule.Value[num2](2),
355+
)
356+
rs, e := m.SafeResolveWith(s)
357+
require.Nil(t, e)
358+
require.Equal(t, nums{1, 2}, rs)
359+
})
334360
}
335361

336362
type Counter struct {

0 commit comments

Comments
 (0)