pub struct VendorStickinessMap(/* private fields */);Expand description
BTreeMap-backed stickiness policy keyed by anti-bot VendorId.
Use with_builtin_defaults to seed the
map with the 2026 guide defaults, then chain
with_override to customise individual vendors
before installing the result on a
ProxyManager.
§Example
use std::time::Duration;
use stygian_proxy::stickiness::{StickinessPolicy, VendorStickinessMap};
use stygian_proxy::types::VendorId;
let map = VendorStickinessMap::with_builtin_defaults();
assert_eq!(
map.for_vendor(VendorId::Akamai),
StickinessPolicy::StickyForTtl { ttl: Duration::from_mins(30) }
);Implementations§
Source§impl VendorStickinessMap
impl VendorStickinessMap
Sourcepub const fn new() -> Self
pub const fn new() -> Self
Empty map — every vendor falls back to
StickinessPolicy::FreshPerRequest at lookup time.
§Example
use stygian_proxy::stickiness::{StickinessPolicy, VendorStickinessMap};
use stygian_proxy::types::VendorId;
let map = VendorStickinessMap::new();
assert!(map.is_empty());
assert_eq!(map.for_vendor(VendorId::Akamai), StickinessPolicy::FreshPerRequest);Sourcepub fn with_builtin_defaults() -> Self
pub fn with_builtin_defaults() -> Self
Built-in defaults from the 2026 scraping guide:
Akamai→StickyForTtl30 minCloudflare→StickyForTtl5 minImperva→StickyForTtl15 minPerimeterX→FreshPerDomainKasada→FreshPerDomainDataDome→FreshPerRequest- everything else →
FreshPerRequest(safest default for unknown vendors)
§Example
use std::time::Duration;
use stygian_proxy::stickiness::{StickinessPolicy, VendorStickinessMap};
use stygian_proxy::types::VendorId;
let map = VendorStickinessMap::with_builtin_defaults();
assert_eq!(
map.for_vendor(VendorId::Akamai),
StickinessPolicy::StickyForTtl { ttl: Duration::from_mins(30) }
);
assert_eq!(map.for_vendor(VendorId::DataDome), StickinessPolicy::FreshPerRequest);
assert_eq!(
map.for_vendor(VendorId::PerimeterX),
StickinessPolicy::FreshPerDomain
);Sourcepub fn for_vendor(&self, vendor: VendorId) -> StickinessPolicy
pub fn for_vendor(&self, vendor: VendorId) -> StickinessPolicy
Look up the policy for vendor.
Unknown vendors (including VendorId::Unknown) fall back to
StickinessPolicy::FreshPerRequest — the safest default.
§Example
use stygian_proxy::stickiness::{StickinessPolicy, VendorStickinessMap};
use stygian_proxy::types::VendorId;
let map = VendorStickinessMap::with_builtin_defaults();
assert_eq!(map.for_vendor(VendorId::DataDome), StickinessPolicy::FreshPerRequest);
assert_eq!(map.for_vendor(VendorId::Unknown), StickinessPolicy::FreshPerRequest);Sourcepub fn with_override(self, vendor: VendorId, policy: StickinessPolicy) -> Self
pub fn with_override(self, vendor: VendorId, policy: StickinessPolicy) -> Self
Insert or replace the policy for vendor. Builder-style: takes
self by value and returns the updated map so calls can be
chained.
§Example
use stygian_proxy::stickiness::{StickinessPolicy, VendorStickinessMap};
use stygian_proxy::types::VendorId;
let map = VendorStickinessMap::with_builtin_defaults()
.with_override(VendorId::Akamai, StickinessPolicy::StickyForever);
assert_eq!(map.for_vendor(VendorId::Akamai), StickinessPolicy::StickyForever);Sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Returns true when no vendor policies have been registered.
§Example
use stygian_proxy::stickiness::VendorStickinessMap;
assert!(VendorStickinessMap::new().is_empty());
assert!(!VendorStickinessMap::with_builtin_defaults().is_empty());Sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
Returns the number of registered vendor policies.
§Example
use stygian_proxy::stickiness::VendorStickinessMap;
use stygian_proxy::types::VendorId;
let map = VendorStickinessMap::with_builtin_defaults();
assert_eq!(map.len(), 6);
let map = VendorStickinessMap::new()
.with_override(VendorId::Akamai, stygian_proxy::stickiness::StickinessPolicy::StickyForever);
assert_eq!(map.len(), 1);Sourcepub fn iter(&self) -> impl Iterator<Item = (VendorId, StickinessPolicy)> + '_
pub fn iter(&self) -> impl Iterator<Item = (VendorId, StickinessPolicy)> + '_
Iterate (vendor, policy) pairs in deterministic (sorted) order.
§Example
use stygian_proxy::stickiness::{StickinessPolicy, VendorStickinessMap};
use stygian_proxy::types::VendorId;
let map = VendorStickinessMap::with_builtin_defaults();
let entries: Vec<_> = map.iter().collect();
// Sorted by VendorId discriminant order — `Akamai` < `Cloudflare`.
assert_eq!(entries.first().map(|(v, _)| *v), Some(VendorId::Akamai));Trait Implementations§
Source§impl Clone for VendorStickinessMap
impl Clone for VendorStickinessMap
Source§fn clone(&self) -> VendorStickinessMap
fn clone(&self) -> VendorStickinessMap
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for VendorStickinessMap
impl Debug for VendorStickinessMap
Source§impl Default for VendorStickinessMap
impl Default for VendorStickinessMap
Source§fn default() -> VendorStickinessMap
fn default() -> VendorStickinessMap
Source§impl<'de> Deserialize<'de> for VendorStickinessMap
impl<'de> Deserialize<'de> for VendorStickinessMap
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl Eq for VendorStickinessMap
Source§impl PartialEq for VendorStickinessMap
impl PartialEq for VendorStickinessMap
Source§impl Serialize for VendorStickinessMap
impl Serialize for VendorStickinessMap
impl StructuralPartialEq for VendorStickinessMap
Auto Trait Implementations§
impl Freeze for VendorStickinessMap
impl RefUnwindSafe for VendorStickinessMap
impl Send for VendorStickinessMap
impl Sync for VendorStickinessMap
impl Unpin for VendorStickinessMap
impl UnsafeUnpin for VendorStickinessMap
impl UnwindSafe for VendorStickinessMap
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.