Skip to content

Commit 7d5b37e

Browse files
authored
fix(client): remove (*Client).ToTyped() to fix binary-size regression (#1479)
BREAKING-CHANGE: (*elasticsearch.Client).ToTyped() is removed. Use elasticsearch.NewTypedFrom(c) instead.
1 parent 81e372c commit 7d5b37e

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
@@ -380,16 +380,21 @@ func NewTyped(opts ...Option) (*TypedClient, error) {
380380
return client, nil
381381
}
382382

383-
// ToTyped returns a [TypedClient] that shares the underlying transport,
384-
// connection pool, and configuration of this [Client].
383+
// NewTypedFrom returns a [TypedClient] that shares c's transport,
384+
// connection pool, and configuration.
385385
//
386-
// ToTyped is intended to be called once per [Client] and the result
387-
// reused. Each call allocates a new [typedapi.MethodAPI] tree, and the
388-
// returned client will re-run the product check on its first request.
386+
// NewTypedFrom is intended to be called once per [Client] and the
387+
// result reused. Each call allocates a new [typedapi.MethodAPI] tree,
388+
// and the returned client will re-run the product check on its first
389+
// request.
390+
//
391+
// NewTypedFrom is a free function rather than a method on [Client] so
392+
// that the Go linker can dead-code-eliminate the typedapi tree for
393+
// callers that never construct a typed client.
389394
//
390395
// Because the transport is shared, closing either client closes the
391396
// connection pool used by both.
392-
func (c *Client) ToTyped() *TypedClient {
397+
func NewTypedFrom(c *Client) *TypedClient {
393398
metaHeader := c.metaHeader
394399
if !strings.Contains(metaHeader, typedClientMetaFlag) {
395400
metaHeader = strings.Join([]string{metaHeader, typedClientMetaFlag}, ",")

elasticsearch_internal_test.go

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

942-
func TestToTyped_AddsTypedFlag(t *testing.T) {
942+
func TestNewTypedFrom_AddsTypedFlag(t *testing.T) {
943943
var captured http.Header
944944
c, err := New()
945945
if err != nil {
946946
t.Fatalf("unexpected error: %s", err)
947947
}
948948
c.Transport = toTypedMockTransport(t, &captured)
949949

950-
tc := c.ToTyped()
950+
tc := NewTypedFrom(c)
951951
if _, err := tc.Info().Do(context.Background()); err != nil {
952952
t.Fatalf("unexpected error: %s", err)
953953
}
@@ -961,23 +961,23 @@ func TestToTyped_AddsTypedFlag(t *testing.T) {
961961
}
962962
}
963963

964-
func TestToTyped_SharesTransport(t *testing.T) {
964+
func TestNewTypedFrom_SharesTransport(t *testing.T) {
965965
c, err := New()
966966
if err != nil {
967967
t.Fatalf("unexpected error: %s", err)
968968
}
969-
tc := c.ToTyped()
969+
tc := NewTypedFrom(c)
970970
if tc.Transport != c.Transport {
971971
t.Errorf("expected converted client to share the source transport")
972972
}
973973
}
974974

975-
func TestToTyped_PreservesConfigFlags(t *testing.T) {
975+
func TestNewTypedFrom_PreservesConfigFlags(t *testing.T) {
976976
c, err := New(WithCompatibilityMode(), WithAutoDrainBody())
977977
if err != nil {
978978
t.Fatalf("unexpected error: %s", err)
979979
}
980-
tc := c.ToTyped()
980+
tc := NewTypedFrom(c)
981981
if !tc.compatibilityHeader {
982982
t.Errorf("expected compatibilityHeader to be carried over")
983983
}
@@ -989,15 +989,15 @@ func TestToTyped_PreservesConfigFlags(t *testing.T) {
989989
}
990990
}
991991

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

1000-
tc := c.ToTyped()
1000+
tc := NewTypedFrom(c)
10011001
if !tc.disableMetaHeader {
10021002
t.Errorf("expected disableMetaHeader to be carried over")
10031003
}
@@ -1010,32 +1010,32 @@ func TestToTyped_PreservesDisableMetaHeader(t *testing.T) {
10101010
}
10111011
}
10121012

1013-
func TestToTyped_IdempotentFlag(t *testing.T) {
1013+
func TestNewTypedFrom_IdempotentFlag(t *testing.T) {
10141014
c, err := New()
10151015
if err != nil {
10161016
t.Fatalf("unexpected error: %s", err)
10171017
}
1018-
first := c.ToTyped()
1018+
first := NewTypedFrom(c)
10191019
if strings.Count(first.metaHeader, "hl=1") != 1 {
10201020
t.Errorf("expected exactly one hl=1, got: %s", first.metaHeader)
10211021
}
10221022

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

1032-
func TestToTyped_SourceNotMutated(t *testing.T) {
1032+
func TestNewTypedFrom_SourceNotMutated(t *testing.T) {
10331033
c, err := New()
10341034
if err != nil {
10351035
t.Fatalf("unexpected error: %s", err)
10361036
}
10371037
before := c.metaHeader
1038-
_ = c.ToTyped()
1038+
_ = NewTypedFrom(c)
10391039
if c.metaHeader != before {
10401040
t.Errorf("source metaHeader mutated: before=%q after=%q", before, c.metaHeader)
10411041
}

0 commit comments

Comments
 (0)