Skip to main content

ProxyRotator

Struct ProxyRotator 

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

Thread-safe proxy rotator that cycles through a list of proxies using a configurable strategy.

The rotator holds a Mutex-protected index that advances each time get_proxy() is called. Duplicate proxies are rejected at construction time to prevent wasted cycles. The default strategy is cyclic_rotation, but you can supply any function matching the RotationStrategy signature.

Implementations§

Source§

impl ProxyRotator

Source

pub fn new(proxies: Vec<Proxy>) -> Result<Self>

Creates a new rotator with the default cyclic_rotation strategy. Returns an error if the proxy list is empty or contains duplicates.

Source

pub fn with_strategy( proxies: Vec<Proxy>, strategy: RotationStrategy, ) -> Result<Self>

Creates a new rotator with a custom rotation strategy. The strategy function receives the full proxy list and the current index, and returns the next index. Returns an error if the proxy list is empty or contains duplicates.

Source

pub fn get_proxy(&self) -> Proxy

Returns the next proxy according to the rotation strategy and advances the internal index. The index is taken modulo the proxy count, so strategies can return any value without worrying about bounds.

Source

pub fn proxies(&self) -> &[Proxy]

Returns a slice of all configured proxies. Useful for logging or diagnostics.

Source

pub fn len(&self) -> usize

Returns the number of proxies in the rotator. Always at least 1 since empty proxy lists are rejected at construction time.

Source

pub fn is_empty(&self) -> bool

Returns true if the rotator contains no proxies. In practice this always returns false since the constructor requires at least one proxy, but this method is provided for API completeness alongside len().

Trait Implementations§

Source§

impl Debug for ProxyRotator

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. 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