Skip to content

Commit 86e8f65

Browse files
authored
fix(client): remove (*Client).ToTyped() to fix binary-size regression (#1480)
BREAKING-CHANGE: (*elasticsearch.Client).ToTyped() is removed. Use elasticsearch.NewTypedFrom(c) instead.
1 parent 8a4935f commit 86e8f65

2 files changed

Lines changed: 24 additions & 19 deletions

File tree

elasticsearch.go

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -392,16 +392,21 @@ func NewTyped(opts ...Option) (*TypedClient, error) {
392392
return client, nil
393393
}
394394

395-
// ToTyped returns a [TypedClient] that shares the underlying transport,
396-
// connection pool, and configuration of this [Client].
395+
// NewTypedFrom returns a [TypedClient] that shares c's transport,
396+
// connection pool, and configuration.
397397
//
398-
// ToTyped is intended to be called once per [Client] and the result
399-
// reused. Each call allocates a new [typedapi.MethodAPI] tree, and the
400-
// returned client will re-run the product check on its first request.
398+
// NewTypedFrom is intended to be called once per [Client] and the
399+
// result reused. Each call allocates a new [typedapi.MethodAPI] tree,
400+
// and the returned client will re-run the product check on its first
401+
// request.
402+
//
403+
// NewTypedFrom is a free function rather than a method on [Client] so
404+
// that the Go linker can dead-code-eliminate the typedapi tree for
405+
// callers that never construct a typed client.
401406
//
402407
// Because the transport is shared, closing either client closes the
403408
// connection pool used by both.
404-
func (c *Client) ToTyped() *TypedClient {
409+
func NewTypedFrom(c *Client) *TypedClient {
405410
metaHeader := c.metaHeader
406411
if !strings.Contains(metaHeader, typedClientMetaFlag) {
407412
metaHeader = strings.Join([]string{metaHeader, typedClientMetaFlag}, ",")

elasticsearch_internal_test.go

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -943,15 +943,15 @@ func toTypedMockTransport(t *testing.T, capture *http.Header) elastictransport.I
943943
return tp
944944
}
945945

946-
func TestToTyped_AddsTypedFlag(t *testing.T) {
946+
func TestNewTypedFrom_AddsTypedFlag(t *testing.T) {
947947
var captured http.Header
948948
c, err := New()
949949
if err != nil {
950950
t.Fatalf("unexpected error: %s", err)
951951
}
952952
c.Transport = toTypedMockTransport(t, &captured)
953953

954-
tc := c.ToTyped()
954+
tc := NewTypedFrom(c)
955955
if _, err := tc.Info().Do(context.Background()); err != nil {
956956
t.Fatalf("unexpected error: %s", err)
957957
}
@@ -965,23 +965,23 @@ func TestToTyped_AddsTypedFlag(t *testing.T) {
965965
}
966966
}
967967

968-
func TestToTyped_SharesTransport(t *testing.T) {
968+
func TestNewTypedFrom_SharesTransport(t *testing.T) {
969969
c, err := New()
970970
if err != nil {
971971
t.Fatalf("unexpected error: %s", err)
972972
}
973-
tc := c.ToTyped()
973+
tc := NewTypedFrom(c)
974974
if tc.Transport != c.Transport {
975975
t.Errorf("expected converted client to share the source transport")
976976
}
977977
}
978978

979-
func TestToTyped_PreservesConfigFlags(t *testing.T) {
979+
func TestNewTypedFrom_PreservesConfigFlags(t *testing.T) {
980980
c, err := New(WithCompatibilityMode(), WithAutoDrainBody())
981981
if err != nil {
982982
t.Fatalf("unexpected error: %s", err)
983983
}
984-
tc := c.ToTyped()
984+
tc := NewTypedFrom(c)
985985
if !tc.compatibilityHeader {
986986
t.Errorf("expected compatibilityHeader to be carried over")
987987
}
@@ -993,15 +993,15 @@ func TestToTyped_PreservesConfigFlags(t *testing.T) {
993993
}
994994
}
995995

996-
func TestToTyped_PreservesDisableMetaHeader(t *testing.T) {
996+
func TestNewTypedFrom_PreservesDisableMetaHeader(t *testing.T) {
997997
var captured http.Header
998998
c, err := New(WithDisableMetaHeader())
999999
if err != nil {
10001000
t.Fatalf("unexpected error: %s", err)
10011001
}
10021002
c.Transport = toTypedMockTransport(t, &captured)
10031003

1004-
tc := c.ToTyped()
1004+
tc := NewTypedFrom(c)
10051005
if !tc.disableMetaHeader {
10061006
t.Errorf("expected disableMetaHeader to be carried over")
10071007
}
@@ -1014,32 +1014,32 @@ func TestToTyped_PreservesDisableMetaHeader(t *testing.T) {
10141014
}
10151015
}
10161016

1017-
func TestToTyped_IdempotentFlag(t *testing.T) {
1017+
func TestNewTypedFrom_IdempotentFlag(t *testing.T) {
10181018
c, err := New()
10191019
if err != nil {
10201020
t.Fatalf("unexpected error: %s", err)
10211021
}
1022-
first := c.ToTyped()
1022+
first := NewTypedFrom(c)
10231023
if strings.Count(first.metaHeader, "hl=1") != 1 {
10241024
t.Errorf("expected exactly one hl=1, got: %s", first.metaHeader)
10251025
}
10261026

10271027
// Simulate a Client whose metaHeader already contains hl=1: the
10281028
// conversion must not append a second occurrence.
10291029
c.metaHeader = first.metaHeader
1030-
second := c.ToTyped()
1030+
second := NewTypedFrom(c)
10311031
if strings.Count(second.metaHeader, "hl=1") != 1 {
10321032
t.Errorf("expected exactly one hl=1, got: %s", second.metaHeader)
10331033
}
10341034
}
10351035

1036-
func TestToTyped_SourceNotMutated(t *testing.T) {
1036+
func TestNewTypedFrom_SourceNotMutated(t *testing.T) {
10371037
c, err := New()
10381038
if err != nil {
10391039
t.Fatalf("unexpected error: %s", err)
10401040
}
10411041
before := c.metaHeader
1042-
_ = c.ToTyped()
1042+
_ = NewTypedFrom(c)
10431043
if c.metaHeader != before {
10441044
t.Errorf("source metaHeader mutated: before=%q after=%q", before, c.metaHeader)
10451045
}

0 commit comments

Comments
 (0)