8
8
"io"
9
9
"net/http"
10
10
"net/url"
11
+ "runtime/debug"
11
12
"strconv"
12
13
13
14
"github.com/hashicorp/go-cleanhttp"
@@ -20,11 +21,6 @@ const (
20
21
jsonMediaType = "application/json"
21
22
)
22
23
23
- const (
24
- libraryVersion = "v0.67.0"
25
- userAgent = "planetscale-go/" + libraryVersion
26
- )
27
-
28
24
// ErrorCode defines the code of an error.
29
25
type ErrorCode string
30
26
@@ -133,6 +129,21 @@ func WithPerPage(perPage int) ListOption {
133
129
// ClientOption provides a variadic option for configuring the client
134
130
type ClientOption func (c * Client ) error
135
131
132
+ func defaultUserAgent () string {
133
+ libraryVersion := "unknown"
134
+ buildInfo , ok := debug .ReadBuildInfo ()
135
+ if ok {
136
+ for _ , dep := range buildInfo .Deps {
137
+ if dep .Path == "github.com/planetscale/planetscale-go" {
138
+ libraryVersion = dep .Version
139
+ break
140
+ }
141
+ }
142
+ }
143
+
144
+ return "planetscale-go/" + libraryVersion
145
+ }
146
+
136
147
// WithUserAgent overrides the User-Agent header.
137
148
func WithUserAgent (userAgent string ) ClientOption {
138
149
return func (c * Client ) error {
@@ -223,7 +234,7 @@ func NewClient(opts ...ClientOption) (*Client, error) {
223
234
c := & Client {
224
235
client : cleanhttp .DefaultClient (),
225
236
baseURL : baseURL ,
226
- UserAgent : userAgent ,
237
+ UserAgent : defaultUserAgent () ,
227
238
headers : make (map [string ]string , 0 ),
228
239
}
229
240
0 commit comments