Struct ProgrammaticBuilder

Source
pub struct ProgrammaticBuilder { /* private fields */ }
Expand description

A builder for external account Credentials that uses a user provided subject token provider.

This builder is designed for advanced use cases where the subject token is provided directly by the application through a custom implementation of the SubjectTokenProvider trait.

§Example

let provider = Arc::new(MyTokenProvider);

let credentials = ProgrammaticBuilder::new(provider)
    .with_audience("//iam.googleapis.com/projects/123/locations/global/workloadIdentityPools/my-pool/providers/my-provider".to_string())
    .with_subject_token_type("urn:ietf:params:oauth:token-type:jwt".to_string())
    .with_token_url("https://sts.googleapis.com/v1beta/token".to_string())
    .with_quota_project_id("my-quota-project")
    .with_scopes(vec!["https://www.googleapis.com/auth/devstorage.read_only".to_string()])
    .build()
    .unwrap();

Implementations§

Source§

impl ProgrammaticBuilder

Source

pub fn new(subject_token_provider: Arc<dyn SubjectTokenProvider>) -> Self

Creates a new builder that uses the provided SubjectTokenProvider to fetch the third-party subject token.

§Example
let provider = Arc::new(MyTokenProvider);
let builder = ProgrammaticBuilder::new(provider);
Source

pub fn with_quota_project_id<S: Into<String>>(self, quota_project_id: S) -> Self

Sets the optional quota project for this credentials.

In some services, you can use a service account in one project for authentication and authorization, and charge the usage to a different project. This requires that the service account has serviceusage.services.use permissions on the quota project.

§Example
let builder = ProgrammaticBuilder::new(provider)
    .with_quota_project_id("my-quota-project");
Source

pub fn with_scopes<I, S>(self, scopes: I) -> Self
where I: IntoIterator<Item = S>, S: Into<String>,

Overrides the optional scopes for this credentials. If this method is not called, a default scope will be used.

§Example
let builder = ProgrammaticBuilder::new(provider)
    .with_scopes(vec!["scope1", "scope2"]);
Source

pub fn with_audience<S: Into<String>>(self, audience: S) -> Self

Sets the required audience for the token exchange.

This is the resource name for the workload identity pool and the provider identifier in that pool.

§Example
let builder = ProgrammaticBuilder::new(provider)
    .with_audience("my-audience");
Source

pub fn with_subject_token_type<S: Into<String>>( self, subject_token_type: S, ) -> Self

Sets the required subject token type.

This is the STS subject token type based on the OAuth 2.0 token exchange spec.

§Example
let builder = ProgrammaticBuilder::new(provider)
    .with_subject_token_type("my-token-type");
Source

pub fn with_token_url<S: Into<String>>(self, token_url: S) -> Self

Sets the optional token URL for the STS token exchange. If not provided, https://sts.googleapis.com/v1/token is used.

§Example
let builder = ProgrammaticBuilder::new(provider)
    .with_token_url("http://my-token-url.com");
Source

pub fn with_client_id<S: Into<String>>(self, client_id: S) -> Self

Sets the optional client ID for client authentication.

§Example
let builder = ProgrammaticBuilder::new(provider)
    .with_client_id("my-client-id");
Source

pub fn with_client_secret<S: Into<String>>(self, client_secret: S) -> Self

Sets the optional client secret for client authentication.

§Example
let builder = ProgrammaticBuilder::new(provider)
    .with_client_secret("my-client-secret");
Source

pub fn with_target_principal<S: Into<String>>(self, target_principal: S) -> Self

Sets the optional target principal.

Target principal is the email of the service account to impersonate.

§Example
let builder = ProgrammaticBuilder::new(provider)
    .with_target_principal("test-principal");
Source

pub fn with_retry_policy<V: Into<RetryPolicyArg>>(self, v: V) -> Self

Configure the retry policy for fetching tokens.

The retry policy controls how to handle retries, and sets limits on the number of attempts or the total time spent retrying.

use gax::retry_policy::{AlwaysRetry, RetryPolicyExt};
let provider = Arc::new(MyTokenProvider);
let credentials = ProgrammaticBuilder::new(provider)
    .with_audience("test-audience")
    .with_subject_token_type("test-token-type")
    .with_retry_policy(AlwaysRetry.with_attempt_limit(3))
    .build();
Source

pub fn with_backoff_policy<V: Into<BackoffPolicyArg>>(self, v: V) -> Self

Configure the retry backoff policy.

The backoff policy controls how long to wait in between retry attempts.

use gax::exponential_backoff::ExponentialBackoff;
let provider = Arc::new(MyTokenProvider);
let policy = ExponentialBackoff::default();
let credentials = ProgrammaticBuilder::new(provider)
    .with_audience("test-audience")
    .with_subject_token_type("test-token-type")
    .with_backoff_policy(policy)
    .build();
Source

pub fn with_retry_throttler<V: Into<RetryThrottlerArg>>(self, v: V) -> Self

Configure the retry throttler.

Advanced applications may want to configure a retry throttler to Address Cascading Failures and when Handling Overload conditions. The authentication library throttles its retry loop, using a policy to control the throttling algorithm. Use this method to fine tune or customize the default retry throttler.

use gax::retry_throttler::AdaptiveThrottler;
let provider = Arc::new(MyTokenProvider);
let credentials = ProgrammaticBuilder::new(provider)
    .with_audience("test-audience")
    .with_subject_token_type("test-token-type")
    .with_retry_throttler(AdaptiveThrottler::default())
    .build();
Source

pub fn build(self) -> Result<Credentials, Error>

Returns a Credentials instance with the configured settings.

§Errors

Returns a BuilderError if any of the required fields (such as audience or subject_token_type) have not been set.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,