Skip to content

Commit 3ef9bcc

Browse files
authored
refreshable v1: Add ToV2() and FromV2() conversion functions (#329)
* refreshable v1: Add ToV2() conversion function * FromV2
1 parent d5ee3e8 commit 3ef9bcc

12 files changed

Lines changed: 708 additions & 0 deletions

File tree

refreshable/go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ go 1.20
44

55
require (
66
github.com/palantir/pkg v1.1.0
7+
github.com/palantir/pkg/refreshable/v2 v2.0.0
78
github.com/stretchr/testify v1.8.4
89
)
910

refreshable/go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
22
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
33
github.com/palantir/pkg v1.1.0 h1:0EhrSUP8oeeh3MUvk7V/UU7WmsN1UiJNTvNj0sN9Cpo=
44
github.com/palantir/pkg v1.1.0/go.mod h1:KC9srP/9ssWRxBxFCIqhUGC4Jt7OJkWRz0Iqehup1/c=
5+
github.com/palantir/pkg/refreshable/v2 v2.0.0 h1:9uxG2L5nqUOfLg4l9YWjmh2JVW38VNXu0t4/mLkC2is=
6+
github.com/palantir/pkg/refreshable/v2 v2.0.0/go.mod h1:SfgGx/EeOCBJWfhDphHIu7nRl5TeXkKzvlfj8o7x9Mg=
57
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
68
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
79
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=

refreshable/v2.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
// Copyright (c) 2023 Palantir Technologies. All rights reserved.
2+
// Use of this source code is governed by a BSD-style
3+
// license that can be found in the LICENSE file.
4+
5+
package refreshable
6+
7+
import (
8+
refreshablev2 "github.com/palantir/pkg/refreshable/v2"
9+
)
10+
11+
// ToV2 converts from a v1 Refreshable created by this package to v2 supporting type safety via generics.
12+
// If v1's value is not of type T, the function panics.
13+
func ToV2[T any](v1 Refreshable) refreshablev2.Refreshable[T] {
14+
v2 := refreshablev2.New[T](v1.Current().(T))
15+
v1.Subscribe(func(i interface{}) {
16+
v2.Update(i.(T))
17+
})
18+
return v2
19+
}
20+
21+
// FromV2 converts from a v1 Refreshable created by this package to v2 supporting type safety via generics.
22+
func FromV2[T any](v2 refreshablev2.Refreshable[T]) Refreshable {
23+
v1 := NewDefaultRefreshable(v2.Current())
24+
v2.Subscribe(func(i T) {
25+
if err := v1.Update(i); err != nil {
26+
panic(err)
27+
}
28+
})
29+
return v1
30+
}

refreshable/v2_test.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// Copyright (c) 2023 Palantir Technologies. All rights reserved.
2+
// Use of this source code is governed by a BSD-style
3+
// license that can be found in the LICENSE file.
4+
5+
package refreshable
6+
7+
import (
8+
"testing"
9+
10+
"github.com/stretchr/testify/assert"
11+
)
12+
13+
func TestToFromV2(t *testing.T) {
14+
base := NewDefaultRefreshable("original")
15+
v2 := ToV2[string](base)
16+
v1 := FromV2(v2)
17+
assert.Equal(t, base.Current(), "original", "base missing original value")
18+
assert.Equal(t, v2.Current(), "original", "v2 missing original value")
19+
assert.Equal(t, v1.Current(), "original", "v1 missing original value")
20+
21+
assert.NoError(t, base.Update("updated"))
22+
assert.Equal(t, base.Current(), "updated", "base missing updated value")
23+
assert.Equal(t, v2.Current(), "updated", "v2 missing updated value")
24+
assert.Equal(t, v1.Current(), "updated", "v1 missing updated value")
25+
}

refreshable/vendor/github.com/palantir/pkg/refreshable/v2/LICENSE

Lines changed: 29 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

refreshable/vendor/github.com/palantir/pkg/refreshable/v2/async.go

Lines changed: 103 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)