Adding upstream version 0.31.1.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
091495b2f3
commit
5d4914ed7f
61 changed files with 30627 additions and 0 deletions
119
options.go
Normal file
119
options.go
Normal file
|
@ -0,0 +1,119 @@
|
|||
package meilisearch
|
||||
|
||||
import (
|
||||
"crypto/tls"
|
||||
"net"
|
||||
"net/http"
|
||||
"time"
|
||||
)
|
||||
|
||||
var (
|
||||
defaultMeiliOpt = &meiliOpt{
|
||||
client: &http.Client{
|
||||
Transport: baseTransport(),
|
||||
},
|
||||
contentEncoding: &encodingOpt{
|
||||
level: DefaultCompression,
|
||||
},
|
||||
retryOnStatus: map[int]bool{
|
||||
502: true,
|
||||
503: true,
|
||||
504: true,
|
||||
},
|
||||
disableRetry: false,
|
||||
maxRetries: 3,
|
||||
}
|
||||
)
|
||||
|
||||
type meiliOpt struct {
|
||||
client *http.Client
|
||||
apiKey string
|
||||
contentEncoding *encodingOpt
|
||||
retryOnStatus map[int]bool
|
||||
disableRetry bool
|
||||
maxRetries uint8
|
||||
}
|
||||
|
||||
type encodingOpt struct {
|
||||
encodingType ContentEncoding
|
||||
level EncodingCompressionLevel
|
||||
}
|
||||
|
||||
type Option func(*meiliOpt)
|
||||
|
||||
// WithCustomClient set custom http.Client
|
||||
func WithCustomClient(client *http.Client) Option {
|
||||
return func(opt *meiliOpt) {
|
||||
opt.client = client
|
||||
}
|
||||
}
|
||||
|
||||
// WithCustomClientWithTLS client support tls configuration
|
||||
func WithCustomClientWithTLS(tlsConfig *tls.Config) Option {
|
||||
return func(opt *meiliOpt) {
|
||||
trans := baseTransport()
|
||||
trans.TLSClientConfig = tlsConfig
|
||||
opt.client = &http.Client{Transport: trans}
|
||||
}
|
||||
}
|
||||
|
||||
// WithAPIKey is API key or master key.
|
||||
//
|
||||
// more: https://www.meilisearch.com/docs/reference/api/keys
|
||||
func WithAPIKey(key string) Option {
|
||||
return func(opt *meiliOpt) {
|
||||
opt.apiKey = key
|
||||
}
|
||||
}
|
||||
|
||||
// WithContentEncoding support the Content-Encoding header indicates the media type is compressed by a given algorithm.
|
||||
// compression improves transfer speed and reduces bandwidth consumption by sending and receiving smaller payloads.
|
||||
// the Accept-Encoding header, instead, indicates the compression algorithm the client understands.
|
||||
//
|
||||
// more: https://www.meilisearch.com/docs/reference/api/overview#content-encoding
|
||||
func WithContentEncoding(encodingType ContentEncoding, level EncodingCompressionLevel) Option {
|
||||
return func(opt *meiliOpt) {
|
||||
opt.contentEncoding = &encodingOpt{
|
||||
encodingType: encodingType,
|
||||
level: level,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// WithCustomRetries set retry on specific http error code and max retries (min: 1, max: 255)
|
||||
func WithCustomRetries(retryOnStatus []int, maxRetries uint8) Option {
|
||||
return func(opt *meiliOpt) {
|
||||
opt.retryOnStatus = make(map[int]bool)
|
||||
for _, status := range retryOnStatus {
|
||||
opt.retryOnStatus[status] = true
|
||||
}
|
||||
|
||||
if maxRetries == 0 {
|
||||
maxRetries = 1
|
||||
}
|
||||
|
||||
opt.maxRetries = maxRetries
|
||||
}
|
||||
}
|
||||
|
||||
// DisableRetries disable retry logic in client
|
||||
func DisableRetries() Option {
|
||||
return func(opt *meiliOpt) {
|
||||
opt.disableRetry = true
|
||||
}
|
||||
}
|
||||
|
||||
func baseTransport() *http.Transport {
|
||||
return &http.Transport{
|
||||
Proxy: http.ProxyFromEnvironment,
|
||||
DialContext: (&net.Dialer{
|
||||
Timeout: 30 * time.Second,
|
||||
KeepAlive: 30 * time.Second,
|
||||
}).DialContext,
|
||||
MaxIdleConns: 100,
|
||||
MaxIdleConnsPerHost: 100,
|
||||
IdleConnTimeout: 90 * time.Second,
|
||||
TLSHandshakeTimeout: 10 * time.Second,
|
||||
ExpectContinueTimeout: 1 * time.Second,
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue