resolveOptions applies opts, resolves addresses, creates the transport via elastictransport.NewClient, and returns the resolved settings. metaHeaderSuffix is appended to the meta header (e.g. "hl=1" for TypedClient).
(opts []Option, metaHeaderSuffix string)
| 202 | // |
| 203 | // metaHeaderSuffix is appended to the meta header (e.g. "hl=1" for TypedClient). |
| 204 | func resolveOptions(opts []Option, metaHeaderSuffix string) (*resolvedOptions, error) { |
| 205 | var co clientOptions |
| 206 | var errs []error |
| 207 | for _, opt := range opts { |
| 208 | if err := opt.apply(&co); err != nil { |
| 209 | errs = append(errs, err) |
| 210 | } |
| 211 | } |
| 212 | if len(errs) > 0 { |
| 213 | return nil, fmt.Errorf("client options: %w", errors.Join(errs...)) |
| 214 | } |
| 215 | |
| 216 | if len(co.addresses) > 0 && co.cloudID != "" { |
| 217 | return nil, errors.New("cannot create client: both Addresses and CloudID are set") |
| 218 | } |
| 219 | |
| 220 | var addrs []string |
| 221 | switch { |
| 222 | case co.cloudID != "": |
| 223 | cloudAddr, err := addrFromCloudID(co.cloudID) |
| 224 | if err != nil { |
| 225 | return nil, fmt.Errorf("cannot create client: cannot parse CloudID: %s", err) |
| 226 | } |
| 227 | addrs = append(addrs, cloudAddr) |
| 228 | case len(co.addresses) > 0: |
| 229 | addrs = append(addrs, co.addresses...) |
| 230 | default: |
| 231 | addrs = addrsFromEnvironment() |
| 232 | } |
| 233 | |
| 234 | urls, err := addrsToURLs(addrs) |
| 235 | if err != nil { |
| 236 | return nil, fmt.Errorf("cannot create client: %s", err) |
| 237 | } |
| 238 | |
| 239 | if len(urls) == 0 { |
| 240 | u, parseErr := parseDefaultURL() |
| 241 | if parseErr != nil { |
| 242 | return nil, parseErr |
| 243 | } |
| 244 | urls = append(urls, u) |
| 245 | } |
| 246 | |
| 247 | tpOpts := []elastictransport.Option{ |
| 248 | elastictransport.WithUserAgent(userAgent), |
| 249 | elastictransport.WithURLs(urls...), |
| 250 | } |
| 251 | |
| 252 | if urls[0].User != nil { |
| 253 | username := urls[0].User.Username() |
| 254 | password, _ := urls[0].User.Password() |
| 255 | tpOpts = append(tpOpts, elastictransport.WithBasicAuth(username, password)) |
| 256 | } |
| 257 | |
| 258 | tpOpts = append(tpOpts, co.transportOptions...) |
| 259 | |
| 260 | tp, err := elastictransport.NewClient(tpOpts...) |
| 261 | if err != nil { |
no test coverage detected