load_options.go (49248B)
1 package config 2 3 import ( 4 "context" 5 "io" 6 7 "github.com/aws/aws-sdk-go-v2/aws" 8 "github.com/aws/aws-sdk-go-v2/credentials/ec2rolecreds" 9 "github.com/aws/aws-sdk-go-v2/credentials/endpointcreds" 10 "github.com/aws/aws-sdk-go-v2/credentials/processcreds" 11 "github.com/aws/aws-sdk-go-v2/credentials/ssocreds" 12 "github.com/aws/aws-sdk-go-v2/credentials/stscreds" 13 "github.com/aws/aws-sdk-go-v2/feature/ec2/imds" 14 smithybearer "github.com/aws/smithy-go/auth/bearer" 15 "github.com/aws/smithy-go/logging" 16 "github.com/aws/smithy-go/middleware" 17 smithyhttp "github.com/aws/smithy-go/transport/http" 18 ) 19 20 // LoadOptionsFunc is a type alias for LoadOptions functional option 21 type LoadOptionsFunc func(*LoadOptions) error 22 23 // LoadOptions are discrete set of options that are valid for loading the 24 // configuration 25 type LoadOptions struct { 26 27 // Region is the region to send requests to. 28 Region string 29 30 // Credentials object to use when signing requests. 31 Credentials aws.CredentialsProvider 32 33 // Token provider for authentication operations with bearer authentication. 34 BearerAuthTokenProvider smithybearer.TokenProvider 35 36 // HTTPClient the SDK's API clients will use to invoke HTTP requests. 37 HTTPClient HTTPClient 38 39 // EndpointResolver that can be used to provide or override an endpoint for 40 // the given service and region. 41 // 42 // See the `aws.EndpointResolver` documentation on usage. 43 // 44 // Deprecated: See EndpointResolverWithOptions 45 EndpointResolver aws.EndpointResolver 46 47 // EndpointResolverWithOptions that can be used to provide or override an 48 // endpoint for the given service and region. 49 // 50 // See the `aws.EndpointResolverWithOptions` documentation on usage. 51 EndpointResolverWithOptions aws.EndpointResolverWithOptions 52 53 // RetryMaxAttempts specifies the maximum number attempts an API client 54 // will call an operation that fails with a retryable error. 55 // 56 // This value will only be used if Retryer option is nil. 57 RetryMaxAttempts int 58 59 // RetryMode specifies the retry model the API client will be created with. 60 // 61 // This value will only be used if Retryer option is nil. 62 RetryMode aws.RetryMode 63 64 // Retryer is a function that provides a Retryer implementation. A Retryer 65 // guides how HTTP requests should be retried in case of recoverable 66 // failures. 67 // 68 // If not nil, RetryMaxAttempts, and RetryMode will be ignored. 69 Retryer func() aws.Retryer 70 71 // APIOptions provides the set of middleware mutations modify how the API 72 // client requests will be handled. This is useful for adding additional 73 // tracing data to a request, or changing behavior of the SDK's client. 74 APIOptions []func(*middleware.Stack) error 75 76 // Logger writer interface to write logging messages to. 77 Logger logging.Logger 78 79 // ClientLogMode is used to configure the events that will be sent to the 80 // configured logger. This can be used to configure the logging of signing, 81 // retries, request, and responses of the SDK clients. 82 // 83 // See the ClientLogMode type documentation for the complete set of logging 84 // modes and available configuration. 85 ClientLogMode *aws.ClientLogMode 86 87 // SharedConfigProfile is the profile to be used when loading the SharedConfig 88 SharedConfigProfile string 89 90 // SharedConfigFiles is the slice of custom shared config files to use when 91 // loading the SharedConfig. A non-default profile used within config file 92 // must have name defined with prefix 'profile '. eg [profile xyz] 93 // indicates a profile with name 'xyz'. To read more on the format of the 94 // config file, please refer the documentation at 95 // https://docs.aws.amazon.com/credref/latest/refdocs/file-format.html#file-format-config 96 // 97 // If duplicate profiles are provided within the same, or across multiple 98 // shared config files, the next parsed profile will override only the 99 // properties that conflict with the previously defined profile. Note that 100 // if duplicate profiles are provided within the SharedCredentialsFiles and 101 // SharedConfigFiles, the properties defined in shared credentials file 102 // take precedence. 103 SharedConfigFiles []string 104 105 // SharedCredentialsFile is the slice of custom shared credentials files to 106 // use when loading the SharedConfig. The profile name used within 107 // credentials file must not prefix 'profile '. eg [xyz] indicates a 108 // profile with name 'xyz'. Profile declared as [profile xyz] will be 109 // ignored. To read more on the format of the credentials file, please 110 // refer the documentation at 111 // https://docs.aws.amazon.com/credref/latest/refdocs/file-format.html#file-format-creds 112 // 113 // If duplicate profiles are provided with a same, or across multiple 114 // shared credentials files, the next parsed profile will override only 115 // properties that conflict with the previously defined profile. Note that 116 // if duplicate profiles are provided within the SharedCredentialsFiles and 117 // SharedConfigFiles, the properties defined in shared credentials file 118 // take precedence. 119 SharedCredentialsFiles []string 120 121 // CustomCABundle is CA bundle PEM bytes reader 122 CustomCABundle io.Reader 123 124 // DefaultRegion is the fall back region, used if a region was not resolved 125 // from other sources 126 DefaultRegion string 127 128 // UseEC2IMDSRegion indicates if SDK should retrieve the region 129 // from the EC2 Metadata service 130 UseEC2IMDSRegion *UseEC2IMDSRegion 131 132 // CredentialsCacheOptions is a function for setting the 133 // aws.CredentialsCacheOptions 134 CredentialsCacheOptions func(*aws.CredentialsCacheOptions) 135 136 // BearerAuthTokenCacheOptions is a function for setting the smithy-go 137 // auth/bearer#TokenCacheOptions 138 BearerAuthTokenCacheOptions func(*smithybearer.TokenCacheOptions) 139 140 // SSOTokenProviderOptions is a function for setting the 141 // credentials/ssocreds.SSOTokenProviderOptions 142 SSOTokenProviderOptions func(*ssocreds.SSOTokenProviderOptions) 143 144 // ProcessCredentialOptions is a function for setting 145 // the processcreds.Options 146 ProcessCredentialOptions func(*processcreds.Options) 147 148 // EC2RoleCredentialOptions is a function for setting 149 // the ec2rolecreds.Options 150 EC2RoleCredentialOptions func(*ec2rolecreds.Options) 151 152 // EndpointCredentialOptions is a function for setting 153 // the endpointcreds.Options 154 EndpointCredentialOptions func(*endpointcreds.Options) 155 156 // WebIdentityRoleCredentialOptions is a function for setting 157 // the stscreds.WebIdentityRoleOptions 158 WebIdentityRoleCredentialOptions func(*stscreds.WebIdentityRoleOptions) 159 160 // AssumeRoleCredentialOptions is a function for setting the 161 // stscreds.AssumeRoleOptions 162 AssumeRoleCredentialOptions func(*stscreds.AssumeRoleOptions) 163 164 // SSOProviderOptions is a function for setting 165 // the ssocreds.Options 166 SSOProviderOptions func(options *ssocreds.Options) 167 168 // LogConfigurationWarnings when set to true, enables logging 169 // configuration warnings 170 LogConfigurationWarnings *bool 171 172 // S3UseARNRegion specifies if the S3 service should allow ARNs to direct 173 // the region, the client's requests are sent to. 174 S3UseARNRegion *bool 175 176 // S3DisableMultiRegionAccessPoints specifies if the S3 service should disable 177 // the S3 Multi-Region access points feature. 178 S3DisableMultiRegionAccessPoints *bool 179 180 // EnableEndpointDiscovery specifies if endpoint discovery is enable for 181 // the client. 182 EnableEndpointDiscovery aws.EndpointDiscoveryEnableState 183 184 // Specifies if the EC2 IMDS service client is enabled. 185 // 186 // AWS_EC2_METADATA_DISABLED=true 187 EC2IMDSClientEnableState imds.ClientEnableState 188 189 // Specifies the EC2 Instance Metadata Service default endpoint selection 190 // mode (IPv4 or IPv6) 191 EC2IMDSEndpointMode imds.EndpointModeState 192 193 // Specifies the EC2 Instance Metadata Service endpoint to use. If 194 // specified it overrides EC2IMDSEndpointMode. 195 EC2IMDSEndpoint string 196 197 // Specifies that SDK clients must resolve a dual-stack endpoint for 198 // services. 199 UseDualStackEndpoint aws.DualStackEndpointState 200 201 // Specifies that SDK clients must resolve a FIPS endpoint for 202 // services. 203 UseFIPSEndpoint aws.FIPSEndpointState 204 205 // Specifies the SDK configuration mode for defaults. 206 DefaultsModeOptions DefaultsModeOptions 207 208 // The sdk app ID retrieved from env var or shared config to be added to request user agent header 209 AppID string 210 211 // Specifies whether an operation request could be compressed 212 DisableRequestCompression *bool 213 214 // The inclusive min bytes of a request body that could be compressed 215 RequestMinCompressSizeBytes *int64 216 217 // Whether S3 Express auth is disabled. 218 S3DisableExpressAuth *bool 219 220 // Whether account id should be built into endpoint resolution 221 AccountIDEndpointMode aws.AccountIDEndpointMode 222 223 // Specify if request checksum should be calculated 224 RequestChecksumCalculation aws.RequestChecksumCalculation 225 226 // Specifies if response checksum should be validated 227 ResponseChecksumValidation aws.ResponseChecksumValidation 228 229 // Service endpoint override. This value is not necessarily final and is 230 // passed to the service's EndpointResolverV2 for further delegation. 231 BaseEndpoint string 232 233 // Registry of operation interceptors. 234 Interceptors smithyhttp.InterceptorRegistry 235 236 // Priority list of preferred auth scheme names (e.g. sigv4a). 237 AuthSchemePreference []string 238 239 // ServiceOptions provides service specific configuration options that will be applied 240 // when constructing clients for specific services. Each callback function receives the service ID 241 // and the service's Options struct, allowing for dynamic configuration based on the service. 242 ServiceOptions []func(string, any) 243 } 244 245 func (o LoadOptions) getDefaultsMode(ctx context.Context) (aws.DefaultsMode, bool, error) { 246 if len(o.DefaultsModeOptions.Mode) == 0 { 247 return "", false, nil 248 } 249 return o.DefaultsModeOptions.Mode, true, nil 250 } 251 252 // GetRetryMaxAttempts returns the RetryMaxAttempts if specified in the 253 // LoadOptions and not 0. 254 func (o LoadOptions) GetRetryMaxAttempts(ctx context.Context) (int, bool, error) { 255 if o.RetryMaxAttempts == 0 { 256 return 0, false, nil 257 } 258 return o.RetryMaxAttempts, true, nil 259 } 260 261 // GetRetryMode returns the RetryMode specified in the LoadOptions. 262 func (o LoadOptions) GetRetryMode(ctx context.Context) (aws.RetryMode, bool, error) { 263 if len(o.RetryMode) == 0 { 264 return "", false, nil 265 } 266 return o.RetryMode, true, nil 267 } 268 269 func (o LoadOptions) getDefaultsModeIMDSClient(ctx context.Context) (*imds.Client, bool, error) { 270 if o.DefaultsModeOptions.IMDSClient == nil { 271 return nil, false, nil 272 } 273 return o.DefaultsModeOptions.IMDSClient, true, nil 274 } 275 276 // getRegion returns Region from config's LoadOptions 277 func (o LoadOptions) getRegion(ctx context.Context) (string, bool, error) { 278 if len(o.Region) == 0 { 279 return "", false, nil 280 } 281 282 return o.Region, true, nil 283 } 284 285 // getAppID returns AppID from config's LoadOptions 286 func (o LoadOptions) getAppID(ctx context.Context) (string, bool, error) { 287 return o.AppID, len(o.AppID) > 0, nil 288 } 289 290 // getDisableRequestCompression returns DisableRequestCompression from config's LoadOptions 291 func (o LoadOptions) getDisableRequestCompression(ctx context.Context) (bool, bool, error) { 292 if o.DisableRequestCompression == nil { 293 return false, false, nil 294 } 295 return *o.DisableRequestCompression, true, nil 296 } 297 298 // getRequestMinCompressSizeBytes returns RequestMinCompressSizeBytes from config's LoadOptions 299 func (o LoadOptions) getRequestMinCompressSizeBytes(ctx context.Context) (int64, bool, error) { 300 if o.RequestMinCompressSizeBytes == nil { 301 return 0, false, nil 302 } 303 return *o.RequestMinCompressSizeBytes, true, nil 304 } 305 306 func (o LoadOptions) getAccountIDEndpointMode(ctx context.Context) (aws.AccountIDEndpointMode, bool, error) { 307 return o.AccountIDEndpointMode, len(o.AccountIDEndpointMode) > 0, nil 308 } 309 310 func (o LoadOptions) getRequestChecksumCalculation(ctx context.Context) (aws.RequestChecksumCalculation, bool, error) { 311 return o.RequestChecksumCalculation, o.RequestChecksumCalculation > 0, nil 312 } 313 314 func (o LoadOptions) getResponseChecksumValidation(ctx context.Context) (aws.ResponseChecksumValidation, bool, error) { 315 return o.ResponseChecksumValidation, o.ResponseChecksumValidation > 0, nil 316 } 317 318 func (o LoadOptions) getBaseEndpoint(context.Context) (string, bool, error) { 319 return o.BaseEndpoint, o.BaseEndpoint != "", nil 320 } 321 322 func (o LoadOptions) getServiceOptions(context.Context) ([]func(string, any), bool, error) { 323 return o.ServiceOptions, len(o.ServiceOptions) > 0, nil 324 } 325 326 // GetServiceBaseEndpoint satisfies (internal/configsources).ServiceBaseEndpointProvider. 327 // 328 // The sdkID value is unused because LoadOptions only supports setting a GLOBAL 329 // endpoint override. In-code, per-service endpoint overrides are performed via 330 // functional options in service client space. 331 func (o LoadOptions) GetServiceBaseEndpoint(context.Context, string) (string, bool, error) { 332 return o.BaseEndpoint, o.BaseEndpoint != "", nil 333 } 334 335 // WithRegion is a helper function to construct functional options 336 // that sets Region on config's LoadOptions. Setting the region to 337 // an empty string, will result in the region value being ignored. 338 // If multiple WithRegion calls are made, the last call overrides 339 // the previous call values. 340 func WithRegion(v string) LoadOptionsFunc { 341 return func(o *LoadOptions) error { 342 o.Region = v 343 return nil 344 } 345 } 346 347 // WithAppID is a helper function to construct functional options 348 // that sets AppID on config's LoadOptions. 349 func WithAppID(ID string) LoadOptionsFunc { 350 return func(o *LoadOptions) error { 351 o.AppID = ID 352 return nil 353 } 354 } 355 356 // WithDisableRequestCompression is a helper function to construct functional options 357 // that sets DisableRequestCompression on config's LoadOptions. 358 func WithDisableRequestCompression(DisableRequestCompression *bool) LoadOptionsFunc { 359 return func(o *LoadOptions) error { 360 if DisableRequestCompression == nil { 361 return nil 362 } 363 o.DisableRequestCompression = DisableRequestCompression 364 return nil 365 } 366 } 367 368 // WithRequestMinCompressSizeBytes is a helper function to construct functional options 369 // that sets RequestMinCompressSizeBytes on config's LoadOptions. 370 func WithRequestMinCompressSizeBytes(RequestMinCompressSizeBytes *int64) LoadOptionsFunc { 371 return func(o *LoadOptions) error { 372 if RequestMinCompressSizeBytes == nil { 373 return nil 374 } 375 o.RequestMinCompressSizeBytes = RequestMinCompressSizeBytes 376 return nil 377 } 378 } 379 380 // WithAccountIDEndpointMode is a helper function to construct functional options 381 // that sets AccountIDEndpointMode on config's LoadOptions 382 func WithAccountIDEndpointMode(m aws.AccountIDEndpointMode) LoadOptionsFunc { 383 return func(o *LoadOptions) error { 384 if m != "" { 385 o.AccountIDEndpointMode = m 386 } 387 return nil 388 } 389 } 390 391 // WithRequestChecksumCalculation is a helper function to construct functional options 392 // that sets RequestChecksumCalculation on config's LoadOptions 393 func WithRequestChecksumCalculation(c aws.RequestChecksumCalculation) LoadOptionsFunc { 394 return func(o *LoadOptions) error { 395 if c > 0 { 396 o.RequestChecksumCalculation = c 397 } 398 return nil 399 } 400 } 401 402 // WithResponseChecksumValidation is a helper function to construct functional options 403 // that sets ResponseChecksumValidation on config's LoadOptions 404 func WithResponseChecksumValidation(v aws.ResponseChecksumValidation) LoadOptionsFunc { 405 return func(o *LoadOptions) error { 406 o.ResponseChecksumValidation = v 407 return nil 408 } 409 } 410 411 // getDefaultRegion returns DefaultRegion from config's LoadOptions 412 func (o LoadOptions) getDefaultRegion(ctx context.Context) (string, bool, error) { 413 if len(o.DefaultRegion) == 0 { 414 return "", false, nil 415 } 416 417 return o.DefaultRegion, true, nil 418 } 419 420 // WithDefaultRegion is a helper function to construct functional options 421 // that sets a DefaultRegion on config's LoadOptions. Setting the default 422 // region to an empty string, will result in the default region value 423 // being ignored. If multiple WithDefaultRegion calls are made, the last 424 // call overrides the previous call values. Note that both WithRegion and 425 // WithEC2IMDSRegion call takes precedence over WithDefaultRegion call 426 // when resolving region. 427 func WithDefaultRegion(v string) LoadOptionsFunc { 428 return func(o *LoadOptions) error { 429 o.DefaultRegion = v 430 return nil 431 } 432 } 433 434 // getSharedConfigProfile returns SharedConfigProfile from config's LoadOptions 435 func (o LoadOptions) getSharedConfigProfile(ctx context.Context) (string, bool, error) { 436 if len(o.SharedConfigProfile) == 0 { 437 return "", false, nil 438 } 439 440 return o.SharedConfigProfile, true, nil 441 } 442 443 // WithSharedConfigProfile is a helper function to construct functional options 444 // that sets SharedConfigProfile on config's LoadOptions. Setting the shared 445 // config profile to an empty string, will result in the shared config profile 446 // value being ignored. 447 // If multiple WithSharedConfigProfile calls are made, the last call overrides 448 // the previous call values. 449 func WithSharedConfigProfile(v string) LoadOptionsFunc { 450 return func(o *LoadOptions) error { 451 o.SharedConfigProfile = v 452 return nil 453 } 454 } 455 456 // getSharedConfigFiles returns SharedConfigFiles set on config's LoadOptions 457 func (o LoadOptions) getSharedConfigFiles(ctx context.Context) ([]string, bool, error) { 458 if o.SharedConfigFiles == nil { 459 return nil, false, nil 460 } 461 462 return o.SharedConfigFiles, true, nil 463 } 464 465 // WithSharedConfigFiles is a helper function to construct functional options 466 // that sets slice of SharedConfigFiles on config's LoadOptions. 467 // Setting the shared config files to an nil string slice, will result in the 468 // shared config files value being ignored. 469 // If multiple WithSharedConfigFiles calls are made, the last call overrides 470 // the previous call values. 471 func WithSharedConfigFiles(v []string) LoadOptionsFunc { 472 return func(o *LoadOptions) error { 473 o.SharedConfigFiles = v 474 return nil 475 } 476 } 477 478 // getSharedCredentialsFiles returns SharedCredentialsFiles set on config's LoadOptions 479 func (o LoadOptions) getSharedCredentialsFiles(ctx context.Context) ([]string, bool, error) { 480 if o.SharedCredentialsFiles == nil { 481 return nil, false, nil 482 } 483 484 return o.SharedCredentialsFiles, true, nil 485 } 486 487 // WithSharedCredentialsFiles is a helper function to construct functional options 488 // that sets slice of SharedCredentialsFiles on config's LoadOptions. 489 // Setting the shared credentials files to an nil string slice, will result in the 490 // shared credentials files value being ignored. 491 // If multiple WithSharedCredentialsFiles calls are made, the last call overrides 492 // the previous call values. 493 func WithSharedCredentialsFiles(v []string) LoadOptionsFunc { 494 return func(o *LoadOptions) error { 495 o.SharedCredentialsFiles = v 496 return nil 497 } 498 } 499 500 // getCustomCABundle returns CustomCABundle from LoadOptions 501 func (o LoadOptions) getCustomCABundle(ctx context.Context) (io.Reader, bool, error) { 502 if o.CustomCABundle == nil { 503 return nil, false, nil 504 } 505 506 return o.CustomCABundle, true, nil 507 } 508 509 // WithCustomCABundle is a helper function to construct functional options 510 // that sets CustomCABundle on config's LoadOptions. Setting the custom CA Bundle 511 // to nil will result in custom CA Bundle value being ignored. 512 // If multiple WithCustomCABundle calls are made, the last call overrides the 513 // previous call values. 514 func WithCustomCABundle(v io.Reader) LoadOptionsFunc { 515 return func(o *LoadOptions) error { 516 o.CustomCABundle = v 517 return nil 518 } 519 } 520 521 // UseEC2IMDSRegion provides a regionProvider that retrieves the region 522 // from the EC2 Metadata service. 523 type UseEC2IMDSRegion struct { 524 // If unset will default to generic EC2 IMDS client. 525 Client *imds.Client 526 } 527 528 // getRegion attempts to retrieve the region from EC2 Metadata service. 529 func (p *UseEC2IMDSRegion) getRegion(ctx context.Context) (string, bool, error) { 530 if ctx == nil { 531 ctx = context.Background() 532 } 533 534 client := p.Client 535 if client == nil { 536 client = imds.New(imds.Options{}) 537 } 538 539 result, err := client.GetRegion(ctx, nil) 540 if err != nil { 541 return "", false, err 542 } 543 if len(result.Region) != 0 { 544 return result.Region, true, nil 545 } 546 return "", false, nil 547 } 548 549 // getEC2IMDSRegion returns the value of EC2 IMDS region. 550 func (o LoadOptions) getEC2IMDSRegion(ctx context.Context) (string, bool, error) { 551 if o.UseEC2IMDSRegion == nil { 552 return "", false, nil 553 } 554 555 return o.UseEC2IMDSRegion.getRegion(ctx) 556 } 557 558 // WithEC2IMDSRegion is a helper function to construct functional options 559 // that enables resolving EC2IMDS region. The function takes 560 // in a UseEC2IMDSRegion functional option, and can be used to set the 561 // EC2IMDS client which will be used to resolve EC2IMDSRegion. 562 // If no functional option is provided, an EC2IMDS client is built and used 563 // by the resolver. If multiple WithEC2IMDSRegion calls are made, the last 564 // call overrides the previous call values. Note that the WithRegion calls takes 565 // precedence over WithEC2IMDSRegion when resolving region. 566 func WithEC2IMDSRegion(fnOpts ...func(o *UseEC2IMDSRegion)) LoadOptionsFunc { 567 return func(o *LoadOptions) error { 568 o.UseEC2IMDSRegion = &UseEC2IMDSRegion{} 569 570 for _, fn := range fnOpts { 571 fn(o.UseEC2IMDSRegion) 572 } 573 return nil 574 } 575 } 576 577 // getCredentialsProvider returns the credentials value 578 func (o LoadOptions) getCredentialsProvider(ctx context.Context) (aws.CredentialsProvider, bool, error) { 579 if o.Credentials == nil { 580 return nil, false, nil 581 } 582 583 return o.Credentials, true, nil 584 } 585 586 // WithCredentialsProvider is a helper function to construct functional options 587 // that sets Credential provider value on config's LoadOptions. If credentials 588 // provider is set to nil, the credentials provider value will be ignored. 589 // If multiple WithCredentialsProvider calls are made, the last call overrides 590 // the previous call values. 591 func WithCredentialsProvider(v aws.CredentialsProvider) LoadOptionsFunc { 592 return func(o *LoadOptions) error { 593 o.Credentials = v 594 return nil 595 } 596 } 597 598 // getCredentialsCacheOptionsProvider returns the wrapped function to set aws.CredentialsCacheOptions 599 func (o LoadOptions) getCredentialsCacheOptions(ctx context.Context) (func(*aws.CredentialsCacheOptions), bool, error) { 600 if o.CredentialsCacheOptions == nil { 601 return nil, false, nil 602 } 603 604 return o.CredentialsCacheOptions, true, nil 605 } 606 607 // WithCredentialsCacheOptions is a helper function to construct functional 608 // options that sets a function to modify the aws.CredentialsCacheOptions the 609 // aws.CredentialsCache will be configured with, if the CredentialsCache is used 610 // by the configuration loader. 611 // 612 // If multiple WithCredentialsCacheOptions calls are made, the last call 613 // overrides the previous call values. 614 func WithCredentialsCacheOptions(v func(*aws.CredentialsCacheOptions)) LoadOptionsFunc { 615 return func(o *LoadOptions) error { 616 o.CredentialsCacheOptions = v 617 return nil 618 } 619 } 620 621 // getBearerAuthTokenProvider returns the credentials value 622 func (o LoadOptions) getBearerAuthTokenProvider(ctx context.Context) (smithybearer.TokenProvider, bool, error) { 623 if o.BearerAuthTokenProvider == nil { 624 return nil, false, nil 625 } 626 627 return o.BearerAuthTokenProvider, true, nil 628 } 629 630 // WithBearerAuthTokenProvider is a helper function to construct functional options 631 // that sets Credential provider value on config's LoadOptions. If credentials 632 // provider is set to nil, the credentials provider value will be ignored. 633 // If multiple WithBearerAuthTokenProvider calls are made, the last call overrides 634 // the previous call values. 635 func WithBearerAuthTokenProvider(v smithybearer.TokenProvider) LoadOptionsFunc { 636 return func(o *LoadOptions) error { 637 o.BearerAuthTokenProvider = v 638 return nil 639 } 640 } 641 642 // getBearerAuthTokenCacheOptionsProvider returns the wrapped function to set smithybearer.TokenCacheOptions 643 func (o LoadOptions) getBearerAuthTokenCacheOptions(ctx context.Context) (func(*smithybearer.TokenCacheOptions), bool, error) { 644 if o.BearerAuthTokenCacheOptions == nil { 645 return nil, false, nil 646 } 647 648 return o.BearerAuthTokenCacheOptions, true, nil 649 } 650 651 // WithBearerAuthTokenCacheOptions is a helper function to construct functional options 652 // that sets a function to modify the TokenCacheOptions the smithy-go 653 // auth/bearer#TokenCache will be configured with, if the TokenCache is used by 654 // the configuration loader. 655 // 656 // If multiple WithBearerAuthTokenCacheOptions calls are made, the last call overrides 657 // the previous call values. 658 func WithBearerAuthTokenCacheOptions(v func(*smithybearer.TokenCacheOptions)) LoadOptionsFunc { 659 return func(o *LoadOptions) error { 660 o.BearerAuthTokenCacheOptions = v 661 return nil 662 } 663 } 664 665 // getSSOTokenProviderOptionsProvider returns the wrapped function to set smithybearer.TokenCacheOptions 666 func (o LoadOptions) getSSOTokenProviderOptions(ctx context.Context) (func(*ssocreds.SSOTokenProviderOptions), bool, error) { 667 if o.SSOTokenProviderOptions == nil { 668 return nil, false, nil 669 } 670 671 return o.SSOTokenProviderOptions, true, nil 672 } 673 674 // WithSSOTokenProviderOptions is a helper function to construct functional 675 // options that sets a function to modify the SSOtokenProviderOptions the SDK's 676 // credentials/ssocreds#SSOProvider will be configured with, if the 677 // SSOTokenProvider is used by the configuration loader. 678 // 679 // If multiple WithSSOTokenProviderOptions calls are made, the last call overrides 680 // the previous call values. 681 func WithSSOTokenProviderOptions(v func(*ssocreds.SSOTokenProviderOptions)) LoadOptionsFunc { 682 return func(o *LoadOptions) error { 683 o.SSOTokenProviderOptions = v 684 return nil 685 } 686 } 687 688 // getProcessCredentialOptions returns the wrapped function to set processcreds.Options 689 func (o LoadOptions) getProcessCredentialOptions(ctx context.Context) (func(*processcreds.Options), bool, error) { 690 if o.ProcessCredentialOptions == nil { 691 return nil, false, nil 692 } 693 694 return o.ProcessCredentialOptions, true, nil 695 } 696 697 // WithProcessCredentialOptions is a helper function to construct functional options 698 // that sets a function to use processcreds.Options on config's LoadOptions. 699 // If process credential options is set to nil, the process credential value will 700 // be ignored. If multiple WithProcessCredentialOptions calls are made, the last call 701 // overrides the previous call values. 702 func WithProcessCredentialOptions(v func(*processcreds.Options)) LoadOptionsFunc { 703 return func(o *LoadOptions) error { 704 o.ProcessCredentialOptions = v 705 return nil 706 } 707 } 708 709 // getEC2RoleCredentialOptions returns the wrapped function to set the ec2rolecreds.Options 710 func (o LoadOptions) getEC2RoleCredentialOptions(ctx context.Context) (func(*ec2rolecreds.Options), bool, error) { 711 if o.EC2RoleCredentialOptions == nil { 712 return nil, false, nil 713 } 714 715 return o.EC2RoleCredentialOptions, true, nil 716 } 717 718 // WithEC2RoleCredentialOptions is a helper function to construct functional options 719 // that sets a function to use ec2rolecreds.Options on config's LoadOptions. If 720 // EC2 role credential options is set to nil, the EC2 role credential options value 721 // will be ignored. If multiple WithEC2RoleCredentialOptions calls are made, 722 // the last call overrides the previous call values. 723 func WithEC2RoleCredentialOptions(v func(*ec2rolecreds.Options)) LoadOptionsFunc { 724 return func(o *LoadOptions) error { 725 o.EC2RoleCredentialOptions = v 726 return nil 727 } 728 } 729 730 // getEndpointCredentialOptions returns the wrapped function to set endpointcreds.Options 731 func (o LoadOptions) getEndpointCredentialOptions(context.Context) (func(*endpointcreds.Options), bool, error) { 732 if o.EndpointCredentialOptions == nil { 733 return nil, false, nil 734 } 735 736 return o.EndpointCredentialOptions, true, nil 737 } 738 739 // WithEndpointCredentialOptions is a helper function to construct functional options 740 // that sets a function to use endpointcreds.Options on config's LoadOptions. If 741 // endpoint credential options is set to nil, the endpoint credential options 742 // value will be ignored. If multiple WithEndpointCredentialOptions calls are made, 743 // the last call overrides the previous call values. 744 func WithEndpointCredentialOptions(v func(*endpointcreds.Options)) LoadOptionsFunc { 745 return func(o *LoadOptions) error { 746 o.EndpointCredentialOptions = v 747 return nil 748 } 749 } 750 751 // getWebIdentityRoleCredentialOptions returns the wrapped function 752 func (o LoadOptions) getWebIdentityRoleCredentialOptions(context.Context) (func(*stscreds.WebIdentityRoleOptions), bool, error) { 753 if o.WebIdentityRoleCredentialOptions == nil { 754 return nil, false, nil 755 } 756 757 return o.WebIdentityRoleCredentialOptions, true, nil 758 } 759 760 // WithWebIdentityRoleCredentialOptions is a helper function to construct 761 // functional options that sets a function to use stscreds.WebIdentityRoleOptions 762 // on config's LoadOptions. If web identity role credentials options is set to nil, 763 // the web identity role credentials value will be ignored. If multiple 764 // WithWebIdentityRoleCredentialOptions calls are made, the last call 765 // overrides the previous call values. 766 func WithWebIdentityRoleCredentialOptions(v func(*stscreds.WebIdentityRoleOptions)) LoadOptionsFunc { 767 return func(o *LoadOptions) error { 768 o.WebIdentityRoleCredentialOptions = v 769 return nil 770 } 771 } 772 773 // getAssumeRoleCredentialOptions returns AssumeRoleCredentialOptions from LoadOptions 774 func (o LoadOptions) getAssumeRoleCredentialOptions(context.Context) (func(options *stscreds.AssumeRoleOptions), bool, error) { 775 if o.AssumeRoleCredentialOptions == nil { 776 return nil, false, nil 777 } 778 779 return o.AssumeRoleCredentialOptions, true, nil 780 } 781 782 // WithAssumeRoleCredentialOptions is a helper function to construct 783 // functional options that sets a function to use stscreds.AssumeRoleOptions 784 // on config's LoadOptions. If assume role credentials options is set to nil, 785 // the assume role credentials value will be ignored. If multiple 786 // WithAssumeRoleCredentialOptions calls are made, the last call overrides 787 // the previous call values. 788 func WithAssumeRoleCredentialOptions(v func(*stscreds.AssumeRoleOptions)) LoadOptionsFunc { 789 return func(o *LoadOptions) error { 790 o.AssumeRoleCredentialOptions = v 791 return nil 792 } 793 } 794 795 func (o LoadOptions) getHTTPClient(ctx context.Context) (HTTPClient, bool, error) { 796 if o.HTTPClient == nil { 797 return nil, false, nil 798 } 799 800 return o.HTTPClient, true, nil 801 } 802 803 // WithHTTPClient is a helper function to construct functional options 804 // that sets HTTPClient on LoadOptions. If HTTPClient is set to nil, 805 // the HTTPClient value will be ignored. 806 // If multiple WithHTTPClient calls are made, the last call overrides 807 // the previous call values. 808 func WithHTTPClient(v HTTPClient) LoadOptionsFunc { 809 return func(o *LoadOptions) error { 810 o.HTTPClient = v 811 return nil 812 } 813 } 814 815 func (o LoadOptions) getAPIOptions(ctx context.Context) ([]func(*middleware.Stack) error, bool, error) { 816 if o.APIOptions == nil { 817 return nil, false, nil 818 } 819 820 return o.APIOptions, true, nil 821 } 822 823 // WithAPIOptions is a helper function to construct functional options 824 // that sets APIOptions on LoadOptions. If APIOptions is set to nil, the 825 // APIOptions value is ignored. If multiple WithAPIOptions calls are 826 // made, the last call overrides the previous call values. 827 func WithAPIOptions(v []func(*middleware.Stack) error) LoadOptionsFunc { 828 return func(o *LoadOptions) error { 829 if v == nil { 830 return nil 831 } 832 833 o.APIOptions = append(o.APIOptions, v...) 834 return nil 835 } 836 } 837 838 func (o LoadOptions) getRetryMaxAttempts(ctx context.Context) (int, bool, error) { 839 if o.RetryMaxAttempts == 0 { 840 return 0, false, nil 841 } 842 843 return o.RetryMaxAttempts, true, nil 844 } 845 846 // WithRetryMaxAttempts is a helper function to construct functional options that sets 847 // RetryMaxAttempts on LoadOptions. If RetryMaxAttempts is unset, the RetryMaxAttempts value is 848 // ignored. If multiple WithRetryMaxAttempts calls are made, the last call overrides 849 // the previous call values. 850 // 851 // Will be ignored of LoadOptions.Retryer or WithRetryer are used. 852 func WithRetryMaxAttempts(v int) LoadOptionsFunc { 853 return func(o *LoadOptions) error { 854 o.RetryMaxAttempts = v 855 return nil 856 } 857 } 858 859 func (o LoadOptions) getRetryMode(ctx context.Context) (aws.RetryMode, bool, error) { 860 if o.RetryMode == "" { 861 return "", false, nil 862 } 863 864 return o.RetryMode, true, nil 865 } 866 867 // WithRetryMode is a helper function to construct functional options that sets 868 // RetryMode on LoadOptions. If RetryMode is unset, the RetryMode value is 869 // ignored. If multiple WithRetryMode calls are made, the last call overrides 870 // the previous call values. 871 // 872 // Will be ignored of LoadOptions.Retryer or WithRetryer are used. 873 func WithRetryMode(v aws.RetryMode) LoadOptionsFunc { 874 return func(o *LoadOptions) error { 875 o.RetryMode = v 876 return nil 877 } 878 } 879 880 func (o LoadOptions) getRetryer(ctx context.Context) (func() aws.Retryer, bool, error) { 881 if o.Retryer == nil { 882 return nil, false, nil 883 } 884 885 return o.Retryer, true, nil 886 } 887 888 // WithRetryer is a helper function to construct functional options 889 // that sets Retryer on LoadOptions. If Retryer is set to nil, the 890 // Retryer value is ignored. If multiple WithRetryer calls are 891 // made, the last call overrides the previous call values. 892 func WithRetryer(v func() aws.Retryer) LoadOptionsFunc { 893 return func(o *LoadOptions) error { 894 o.Retryer = v 895 return nil 896 } 897 } 898 899 func (o LoadOptions) getEndpointResolver(ctx context.Context) (aws.EndpointResolver, bool, error) { 900 if o.EndpointResolver == nil { 901 return nil, false, nil 902 } 903 904 return o.EndpointResolver, true, nil 905 } 906 907 // WithEndpointResolver is a helper function to construct functional options 908 // that sets the EndpointResolver on LoadOptions. If the EndpointResolver is set to nil, 909 // the EndpointResolver value is ignored. If multiple WithEndpointResolver calls 910 // are made, the last call overrides the previous call values. 911 // 912 // Deprecated: The global endpoint resolution interface is deprecated. The API 913 // for endpoint resolution is now unique to each service and is set via the 914 // EndpointResolverV2 field on service client options. Use of 915 // WithEndpointResolver or WithEndpointResolverWithOptions will prevent you 916 // from using any endpoint-related service features released after the 917 // introduction of EndpointResolverV2. You may also encounter broken or 918 // unexpected behavior when using the old global interface with services that 919 // use many endpoint-related customizations such as S3. 920 func WithEndpointResolver(v aws.EndpointResolver) LoadOptionsFunc { 921 return func(o *LoadOptions) error { 922 o.EndpointResolver = v 923 return nil 924 } 925 } 926 927 func (o LoadOptions) getEndpointResolverWithOptions(ctx context.Context) (aws.EndpointResolverWithOptions, bool, error) { 928 if o.EndpointResolverWithOptions == nil { 929 return nil, false, nil 930 } 931 932 return o.EndpointResolverWithOptions, true, nil 933 } 934 935 // WithEndpointResolverWithOptions is a helper function to construct functional options 936 // that sets the EndpointResolverWithOptions on LoadOptions. If the EndpointResolverWithOptions is set to nil, 937 // the EndpointResolver value is ignored. If multiple WithEndpointResolver calls 938 // are made, the last call overrides the previous call values. 939 // 940 // Deprecated: The global endpoint resolution interface is deprecated. See 941 // deprecation docs on [WithEndpointResolver]. 942 func WithEndpointResolverWithOptions(v aws.EndpointResolverWithOptions) LoadOptionsFunc { 943 return func(o *LoadOptions) error { 944 o.EndpointResolverWithOptions = v 945 return nil 946 } 947 } 948 949 func (o LoadOptions) getLogger(ctx context.Context) (logging.Logger, bool, error) { 950 if o.Logger == nil { 951 return nil, false, nil 952 } 953 954 return o.Logger, true, nil 955 } 956 957 // WithLogger is a helper function to construct functional options 958 // that sets Logger on LoadOptions. If Logger is set to nil, the 959 // Logger value will be ignored. If multiple WithLogger calls are made, 960 // the last call overrides the previous call values. 961 func WithLogger(v logging.Logger) LoadOptionsFunc { 962 return func(o *LoadOptions) error { 963 o.Logger = v 964 return nil 965 } 966 } 967 968 func (o LoadOptions) getClientLogMode(ctx context.Context) (aws.ClientLogMode, bool, error) { 969 if o.ClientLogMode == nil { 970 return 0, false, nil 971 } 972 973 return *o.ClientLogMode, true, nil 974 } 975 976 // WithClientLogMode is a helper function to construct functional options 977 // that sets client log mode on LoadOptions. If client log mode is set to nil, 978 // the client log mode value will be ignored. If multiple WithClientLogMode calls are made, 979 // the last call overrides the previous call values. 980 func WithClientLogMode(v aws.ClientLogMode) LoadOptionsFunc { 981 return func(o *LoadOptions) error { 982 o.ClientLogMode = &v 983 return nil 984 } 985 } 986 987 func (o LoadOptions) getLogConfigurationWarnings(ctx context.Context) (v bool, found bool, err error) { 988 if o.LogConfigurationWarnings == nil { 989 return false, false, nil 990 } 991 return *o.LogConfigurationWarnings, true, nil 992 } 993 994 // WithLogConfigurationWarnings is a helper function to construct 995 // functional options that can be used to set LogConfigurationWarnings 996 // on LoadOptions. 997 // 998 // If multiple WithLogConfigurationWarnings calls are made, the last call 999 // overrides the previous call values. 1000 func WithLogConfigurationWarnings(v bool) LoadOptionsFunc { 1001 return func(o *LoadOptions) error { 1002 o.LogConfigurationWarnings = &v 1003 return nil 1004 } 1005 } 1006 1007 // GetS3UseARNRegion returns whether to allow ARNs to direct the region 1008 // the S3 client's requests are sent to. 1009 func (o LoadOptions) GetS3UseARNRegion(ctx context.Context) (v bool, found bool, err error) { 1010 if o.S3UseARNRegion == nil { 1011 return false, false, nil 1012 } 1013 return *o.S3UseARNRegion, true, nil 1014 } 1015 1016 // WithS3UseARNRegion is a helper function to construct functional options 1017 // that can be used to set S3UseARNRegion on LoadOptions. 1018 // If multiple WithS3UseARNRegion calls are made, the last call overrides 1019 // the previous call values. 1020 func WithS3UseARNRegion(v bool) LoadOptionsFunc { 1021 return func(o *LoadOptions) error { 1022 o.S3UseARNRegion = &v 1023 return nil 1024 } 1025 } 1026 1027 // GetS3DisableMultiRegionAccessPoints returns whether to disable 1028 // the S3 multi-region access points feature. 1029 func (o LoadOptions) GetS3DisableMultiRegionAccessPoints(ctx context.Context) (v bool, found bool, err error) { 1030 if o.S3DisableMultiRegionAccessPoints == nil { 1031 return false, false, nil 1032 } 1033 return *o.S3DisableMultiRegionAccessPoints, true, nil 1034 } 1035 1036 // WithS3DisableMultiRegionAccessPoints is a helper function to construct functional options 1037 // that can be used to set S3DisableMultiRegionAccessPoints on LoadOptions. 1038 // If multiple WithS3DisableMultiRegionAccessPoints calls are made, the last call overrides 1039 // the previous call values. 1040 func WithS3DisableMultiRegionAccessPoints(v bool) LoadOptionsFunc { 1041 return func(o *LoadOptions) error { 1042 o.S3DisableMultiRegionAccessPoints = &v 1043 return nil 1044 } 1045 } 1046 1047 // GetEnableEndpointDiscovery returns if the EnableEndpointDiscovery flag is set. 1048 func (o LoadOptions) GetEnableEndpointDiscovery(ctx context.Context) (value aws.EndpointDiscoveryEnableState, ok bool, err error) { 1049 if o.EnableEndpointDiscovery == aws.EndpointDiscoveryUnset { 1050 return aws.EndpointDiscoveryUnset, false, nil 1051 } 1052 return o.EnableEndpointDiscovery, true, nil 1053 } 1054 1055 // WithEndpointDiscovery is a helper function to construct functional options 1056 // that can be used to enable endpoint discovery on LoadOptions for supported clients. 1057 // If multiple WithEndpointDiscovery calls are made, the last call overrides 1058 // the previous call values. 1059 func WithEndpointDiscovery(v aws.EndpointDiscoveryEnableState) LoadOptionsFunc { 1060 return func(o *LoadOptions) error { 1061 o.EnableEndpointDiscovery = v 1062 return nil 1063 } 1064 } 1065 1066 // getSSOProviderOptions returns AssumeRoleCredentialOptions from LoadOptions 1067 func (o LoadOptions) getSSOProviderOptions(context.Context) (func(options *ssocreds.Options), bool, error) { 1068 if o.SSOProviderOptions == nil { 1069 return nil, false, nil 1070 } 1071 1072 return o.SSOProviderOptions, true, nil 1073 } 1074 1075 // WithSSOProviderOptions is a helper function to construct 1076 // functional options that sets a function to use ssocreds.Options 1077 // on config's LoadOptions. If the SSO credential provider options is set to nil, 1078 // the sso provider options value will be ignored. If multiple 1079 // WithSSOProviderOptions calls are made, the last call overrides 1080 // the previous call values. 1081 func WithSSOProviderOptions(v func(*ssocreds.Options)) LoadOptionsFunc { 1082 return func(o *LoadOptions) error { 1083 o.SSOProviderOptions = v 1084 return nil 1085 } 1086 } 1087 1088 // GetEC2IMDSClientEnableState implements a EC2IMDSClientEnableState options resolver interface. 1089 func (o LoadOptions) GetEC2IMDSClientEnableState() (imds.ClientEnableState, bool, error) { 1090 if o.EC2IMDSClientEnableState == imds.ClientDefaultEnableState { 1091 return imds.ClientDefaultEnableState, false, nil 1092 } 1093 1094 return o.EC2IMDSClientEnableState, true, nil 1095 } 1096 1097 // GetEC2IMDSEndpointMode implements a EC2IMDSEndpointMode option resolver interface. 1098 func (o LoadOptions) GetEC2IMDSEndpointMode() (imds.EndpointModeState, bool, error) { 1099 if o.EC2IMDSEndpointMode == imds.EndpointModeStateUnset { 1100 return imds.EndpointModeStateUnset, false, nil 1101 } 1102 1103 return o.EC2IMDSEndpointMode, true, nil 1104 } 1105 1106 // GetEC2IMDSEndpoint implements a EC2IMDSEndpoint option resolver interface. 1107 func (o LoadOptions) GetEC2IMDSEndpoint() (string, bool, error) { 1108 if len(o.EC2IMDSEndpoint) == 0 { 1109 return "", false, nil 1110 } 1111 1112 return o.EC2IMDSEndpoint, true, nil 1113 } 1114 1115 // WithEC2IMDSClientEnableState is a helper function to construct functional options that sets the EC2IMDSClientEnableState. 1116 func WithEC2IMDSClientEnableState(v imds.ClientEnableState) LoadOptionsFunc { 1117 return func(o *LoadOptions) error { 1118 o.EC2IMDSClientEnableState = v 1119 return nil 1120 } 1121 } 1122 1123 // WithEC2IMDSEndpointMode is a helper function to construct functional options that sets the EC2IMDSEndpointMode. 1124 func WithEC2IMDSEndpointMode(v imds.EndpointModeState) LoadOptionsFunc { 1125 return func(o *LoadOptions) error { 1126 o.EC2IMDSEndpointMode = v 1127 return nil 1128 } 1129 } 1130 1131 // WithEC2IMDSEndpoint is a helper function to construct functional options that sets the EC2IMDSEndpoint. 1132 func WithEC2IMDSEndpoint(v string) LoadOptionsFunc { 1133 return func(o *LoadOptions) error { 1134 o.EC2IMDSEndpoint = v 1135 return nil 1136 } 1137 } 1138 1139 // WithUseDualStackEndpoint is a helper function to construct 1140 // functional options that can be used to set UseDualStackEndpoint on LoadOptions. 1141 func WithUseDualStackEndpoint(v aws.DualStackEndpointState) LoadOptionsFunc { 1142 return func(o *LoadOptions) error { 1143 o.UseDualStackEndpoint = v 1144 return nil 1145 } 1146 } 1147 1148 // GetUseDualStackEndpoint returns whether the service's dual-stack endpoint should be 1149 // used for requests. 1150 func (o LoadOptions) GetUseDualStackEndpoint(ctx context.Context) (value aws.DualStackEndpointState, found bool, err error) { 1151 if o.UseDualStackEndpoint == aws.DualStackEndpointStateUnset { 1152 return aws.DualStackEndpointStateUnset, false, nil 1153 } 1154 return o.UseDualStackEndpoint, true, nil 1155 } 1156 1157 // WithUseFIPSEndpoint is a helper function to construct 1158 // functional options that can be used to set UseFIPSEndpoint on LoadOptions. 1159 func WithUseFIPSEndpoint(v aws.FIPSEndpointState) LoadOptionsFunc { 1160 return func(o *LoadOptions) error { 1161 o.UseFIPSEndpoint = v 1162 return nil 1163 } 1164 } 1165 1166 // GetUseFIPSEndpoint returns whether the service's FIPS endpoint should be 1167 // used for requests. 1168 func (o LoadOptions) GetUseFIPSEndpoint(ctx context.Context) (value aws.FIPSEndpointState, found bool, err error) { 1169 if o.UseFIPSEndpoint == aws.FIPSEndpointStateUnset { 1170 return aws.FIPSEndpointStateUnset, false, nil 1171 } 1172 return o.UseFIPSEndpoint, true, nil 1173 } 1174 1175 // WithDefaultsMode sets the SDK defaults configuration mode to the value provided. 1176 // 1177 // Zero or more functional options can be provided to provide configuration options for performing 1178 // environment discovery when using aws.DefaultsModeAuto. 1179 func WithDefaultsMode(mode aws.DefaultsMode, optFns ...func(options *DefaultsModeOptions)) LoadOptionsFunc { 1180 do := DefaultsModeOptions{ 1181 Mode: mode, 1182 } 1183 for _, fn := range optFns { 1184 fn(&do) 1185 } 1186 return func(options *LoadOptions) error { 1187 options.DefaultsModeOptions = do 1188 return nil 1189 } 1190 } 1191 1192 // GetS3DisableExpressAuth returns the configured value for 1193 // [EnvConfig.S3DisableExpressAuth]. 1194 func (o LoadOptions) GetS3DisableExpressAuth() (value, ok bool) { 1195 if o.S3DisableExpressAuth == nil { 1196 return false, false 1197 } 1198 1199 return *o.S3DisableExpressAuth, true 1200 } 1201 1202 // WithS3DisableExpressAuth sets [LoadOptions.S3DisableExpressAuth] 1203 // to the value provided. 1204 func WithS3DisableExpressAuth(v bool) LoadOptionsFunc { 1205 return func(o *LoadOptions) error { 1206 o.S3DisableExpressAuth = &v 1207 return nil 1208 } 1209 } 1210 1211 // WithBaseEndpoint is a helper function to construct functional options that 1212 // sets BaseEndpoint on config's LoadOptions. Empty values have no effect, and 1213 // subsequent calls to this API override previous ones. 1214 // 1215 // This is an in-code setting, therefore, any value set using this hook takes 1216 // precedence over and will override ALL environment and shared config 1217 // directives that set endpoint URLs. Functional options on service clients 1218 // have higher specificity, and functional options that modify the value of 1219 // BaseEndpoint on a client will take precedence over this setting. 1220 func WithBaseEndpoint(v string) LoadOptionsFunc { 1221 return func(o *LoadOptions) error { 1222 o.BaseEndpoint = v 1223 return nil 1224 } 1225 } 1226 1227 // WithServiceOptions is a helper function to construct functional options 1228 // that sets ServiceOptions on config's LoadOptions. 1229 func WithServiceOptions(callbacks ...func(string, any)) LoadOptionsFunc { 1230 return func(o *LoadOptions) error { 1231 o.ServiceOptions = append(o.ServiceOptions, callbacks...) 1232 return nil 1233 } 1234 } 1235 1236 // WithBeforeExecution adds the BeforeExecutionInterceptor to config. 1237 func WithBeforeExecution(i smithyhttp.BeforeExecutionInterceptor) LoadOptionsFunc { 1238 return func(o *LoadOptions) error { 1239 o.Interceptors.BeforeExecution = append(o.Interceptors.BeforeExecution, i) 1240 return nil 1241 } 1242 } 1243 1244 // WithBeforeSerialization adds the BeforeSerializationInterceptor to config. 1245 func WithBeforeSerialization(i smithyhttp.BeforeSerializationInterceptor) LoadOptionsFunc { 1246 return func(o *LoadOptions) error { 1247 o.Interceptors.BeforeSerialization = append(o.Interceptors.BeforeSerialization, i) 1248 return nil 1249 } 1250 } 1251 1252 // WithAfterSerialization adds the AfterSerializationInterceptor to config. 1253 func WithAfterSerialization(i smithyhttp.AfterSerializationInterceptor) LoadOptionsFunc { 1254 return func(o *LoadOptions) error { 1255 o.Interceptors.AfterSerialization = append(o.Interceptors.AfterSerialization, i) 1256 return nil 1257 } 1258 } 1259 1260 // WithBeforeRetryLoop adds the BeforeRetryLoopInterceptor to config. 1261 func WithBeforeRetryLoop(i smithyhttp.BeforeRetryLoopInterceptor) LoadOptionsFunc { 1262 return func(o *LoadOptions) error { 1263 o.Interceptors.BeforeRetryLoop = append(o.Interceptors.BeforeRetryLoop, i) 1264 return nil 1265 } 1266 } 1267 1268 // WithBeforeAttempt adds the BeforeAttemptInterceptor to config. 1269 func WithBeforeAttempt(i smithyhttp.BeforeAttemptInterceptor) LoadOptionsFunc { 1270 return func(o *LoadOptions) error { 1271 o.Interceptors.BeforeAttempt = append(o.Interceptors.BeforeAttempt, i) 1272 return nil 1273 } 1274 } 1275 1276 // WithBeforeSigning adds the BeforeSigningInterceptor to config. 1277 func WithBeforeSigning(i smithyhttp.BeforeSigningInterceptor) LoadOptionsFunc { 1278 return func(o *LoadOptions) error { 1279 o.Interceptors.BeforeSigning = append(o.Interceptors.BeforeSigning, i) 1280 return nil 1281 } 1282 } 1283 1284 // WithAfterSigning adds the AfterSigningInterceptor to config. 1285 func WithAfterSigning(i smithyhttp.AfterSigningInterceptor) LoadOptionsFunc { 1286 return func(o *LoadOptions) error { 1287 o.Interceptors.AfterSigning = append(o.Interceptors.AfterSigning, i) 1288 return nil 1289 } 1290 } 1291 1292 // WithBeforeTransmit adds the BeforeTransmitInterceptor to config. 1293 func WithBeforeTransmit(i smithyhttp.BeforeTransmitInterceptor) LoadOptionsFunc { 1294 return func(o *LoadOptions) error { 1295 o.Interceptors.BeforeTransmit = append(o.Interceptors.BeforeTransmit, i) 1296 return nil 1297 } 1298 } 1299 1300 // WithAfterTransmit adds the AfterTransmitInterceptor to config. 1301 func WithAfterTransmit(i smithyhttp.AfterTransmitInterceptor) LoadOptionsFunc { 1302 return func(o *LoadOptions) error { 1303 o.Interceptors.AfterTransmit = append(o.Interceptors.AfterTransmit, i) 1304 return nil 1305 } 1306 } 1307 1308 // WithBeforeDeserialization adds the BeforeDeserializationInterceptor to config. 1309 func WithBeforeDeserialization(i smithyhttp.BeforeDeserializationInterceptor) LoadOptionsFunc { 1310 return func(o *LoadOptions) error { 1311 o.Interceptors.BeforeDeserialization = append(o.Interceptors.BeforeDeserialization, i) 1312 return nil 1313 } 1314 } 1315 1316 // WithAfterDeserialization adds the AfterDeserializationInterceptor to config. 1317 func WithAfterDeserialization(i smithyhttp.AfterDeserializationInterceptor) LoadOptionsFunc { 1318 return func(o *LoadOptions) error { 1319 o.Interceptors.AfterDeserialization = append(o.Interceptors.AfterDeserialization, i) 1320 return nil 1321 } 1322 } 1323 1324 // WithAfterAttempt adds the AfterAttemptInterceptor to config. 1325 func WithAfterAttempt(i smithyhttp.AfterAttemptInterceptor) LoadOptionsFunc { 1326 return func(o *LoadOptions) error { 1327 o.Interceptors.AfterAttempt = append(o.Interceptors.AfterAttempt, i) 1328 return nil 1329 } 1330 } 1331 1332 // WithAfterExecution adds the AfterExecutionInterceptor to config. 1333 func WithAfterExecution(i smithyhttp.AfterExecutionInterceptor) LoadOptionsFunc { 1334 return func(o *LoadOptions) error { 1335 o.Interceptors.AfterExecution = append(o.Interceptors.AfterExecution, i) 1336 return nil 1337 } 1338 } 1339 1340 // WithAuthSchemePreference sets the priority order of auth schemes on config. 1341 // 1342 // Schemes are expressed as names e.g. sigv4a or sigv4. 1343 func WithAuthSchemePreference(schemeIDs ...string) LoadOptionsFunc { 1344 return func(o *LoadOptions) error { 1345 o.AuthSchemePreference = schemeIDs 1346 return nil 1347 } 1348 } 1349 1350 func (o LoadOptions) getAuthSchemePreference() ([]string, bool) { 1351 if len(o.AuthSchemePreference) > 0 { 1352 return o.AuthSchemePreference, true 1353 } 1354 return nil, false 1355 }