mirror of
https://github.com/larksuite/cli.git
synced 2026-09-14 18:42:53 +08:00
56 lines
1.1 KiB
Go
56 lines
1.1 KiB
Go
// Copyright (c) 2026 Lark Technologies Pte. Ltd.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package client
|
|
|
|
import (
|
|
"net/http"
|
|
"time"
|
|
)
|
|
|
|
// Option configures API request behavior for DoStream (and future DoSDKRequest).
|
|
type Option func(*requestConfig)
|
|
|
|
type requestConfig struct {
|
|
timeout time.Duration
|
|
headers http.Header
|
|
replaySafe bool
|
|
}
|
|
|
|
// WithReplaySafe allows transient failures to be reported as retryable.
|
|
// DoStream does not retry the request itself.
|
|
func WithReplaySafe() Option {
|
|
return func(c *requestConfig) {
|
|
c.replaySafe = true
|
|
}
|
|
}
|
|
|
|
// WithTimeout sets a request-level timeout that overrides the client default.
|
|
func WithTimeout(d time.Duration) Option {
|
|
return func(c *requestConfig) {
|
|
c.timeout = d
|
|
}
|
|
}
|
|
|
|
// WithHeaders adds extra HTTP headers to the request.
|
|
func WithHeaders(h http.Header) Option {
|
|
return func(c *requestConfig) {
|
|
if c.headers == nil {
|
|
c.headers = make(http.Header)
|
|
}
|
|
for k, vs := range h {
|
|
for _, v := range vs {
|
|
c.headers.Add(k, v)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func buildConfig(opts []Option) requestConfig {
|
|
var cfg requestConfig
|
|
for _, o := range opts {
|
|
o(&cfg)
|
|
}
|
|
return cfg
|
|
}
|