pub struct Playbook {
pub id: String,
pub target_class: TargetClass,
pub description: String,
pub acquisition: AcquisitionDefaults,
pub proxy_preference: ProxyPreference,
pub pacing: PacingProfile,
pub escalation: EscalationStrategy,
}Expand description
A single codified playbook for one anti-bot tier.
§Example
use stygian_charon::playbooks::{
AcquisitionDefaults, EscalationStrategy, PacingProfile, Playbook, ProxyPreference,
};
use stygian_charon::acquisition::AcquisitionModeHint;
use stygian_charon::types::TargetClass;
let pb = Playbook {
id: "tier1-static".to_string(),
target_class: TargetClass::ContentSite,
description: "Static content sites".to_string(),
acquisition: AcquisitionDefaults::default_for(TargetClass::ContentSite),
proxy_preference: ProxyPreference::default(),
pacing: PacingProfile::default(),
escalation: EscalationStrategy::Capped { ceiling: AcquisitionModeHint::Resilient },
};
assert!(pb.validate().is_ok());Fields§
§id: StringStable identifier ("tier1-static", "tier1-js",
"tier2-hostile", etc.). Required, non-empty, unique within a
resolver bundle.
target_class: TargetClassTarget class this playbook belongs to.
description: StringHuman-readable description for operator logs.
acquisition: AcquisitionDefaultsAcquisition-mode defaults.
proxy_preference: ProxyPreferenceProxy preference.
pacing: PacingProfilePacing profile.
escalation: EscalationStrategyEscalation strategy.
Implementations§
Source§impl Playbook
impl Playbook
Sourcepub fn validate(&self) -> Result<(), ValidationError>
pub fn validate(&self) -> Result<(), ValidationError>
Validate the playbook’s internal consistency. Reports the first failing field with a structured error that includes both the field path and the bad value.
§Errors
Returns ValidationError on the first inconsistency. The
error embeds the field path and the bad value so operators
can locate the offending TOML line without re-running the
loader.
§Example
use stygian_charon::playbooks::{
AcquisitionDefaults, EscalationStrategy, PacingProfile, Playbook, ProxyPreference,
};
use stygian_charon::acquisition::AcquisitionModeHint;
use stygian_charon::types::{ExecutionMode, SessionMode, TargetClass, TelemetryLevel};
let bad = Playbook {
id: String::new(),
target_class: TargetClass::ContentSite,
description: String::new(),
acquisition: AcquisitionDefaults {
mode: AcquisitionModeHint::Fast,
execution_mode: ExecutionMode::Http,
session_mode: SessionMode::Stateless,
telemetry_level: TelemetryLevel::Basic,
sticky_session_ttl_secs: None,
enable_warmup: false,
retry_budget: 0,
backoff_base_ms: 250,
},
proxy_preference: ProxyPreference::default(),
pacing: PacingProfile::default(),
escalation: EscalationStrategy::Capped { ceiling: AcquisitionModeHint::Fast },
};
let err = bad.validate().expect_err("id is empty");
assert!(err.to_string().contains("id"));Sourcepub const fn to_runtime_policy_hints(&self) -> RuntimePolicyHints
pub const fn to_runtime_policy_hints(&self) -> RuntimePolicyHints
Convenience helper that converts the resolved playbook into a
crate::acquisition::RuntimePolicyHints block ready to feed
into crate::acquisition::map_policy_hints. The mapping is
pure and deterministic.
§Example
use stygian_charon::playbooks::{Playbook, AcquisitionDefaults};
use stygian_charon::types::TargetClass;
let pb = Playbook {
id: "tier1-static".to_string(),
target_class: TargetClass::ContentSite,
description: String::new(),
acquisition: AcquisitionDefaults::default_for(TargetClass::ContentSite),
proxy_preference: Default::default(),
pacing: Default::default(),
escalation: Default::default(),
};
let _hints = pb.to_runtime_policy_hints();