use std::sync::Arc;
pub mod declaration;
pub mod position;
pub mod proof_action;
pub mod proof_search;
pub(crate) mod source_input;
use crate::broker::ProjectBroker;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum ResponseCarrier {
#[default]
Text,
Structured,
Both,
}
impl ResponseCarrier {
pub fn parse(value: &str) -> Option<Self> {
match value.trim().to_ascii_lowercase().as_str() {
"text" => Some(Self::Text),
"structured" => Some(Self::Structured),
"both" => Some(Self::Both),
_ => None,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum TelemetryVerbosity {
#[default]
Quiet,
Full,
}
impl TelemetryVerbosity {
pub fn parse(value: &str) -> Option<Self> {
match value.trim().to_ascii_lowercase().as_str() {
"quiet" => Some(Self::Quiet),
"full" => Some(Self::Full),
_ => None,
}
}
#[must_use]
pub fn is_full(self) -> bool {
matches!(self, Self::Full)
}
}
#[derive(Debug, Clone, Copy, Default)]
pub struct OutputBudgetOverrides {
pub max_field_bytes: Option<u32>,
pub max_total_bytes: Option<u32>,
pub heartbeat_limit: Option<u64>,
}
#[derive(Debug, Clone, Copy, Default)]
pub struct ToolConfig {
pub carrier: ResponseCarrier,
pub verbosity: TelemetryVerbosity,
pub output: OutputBudgetOverrides,
}
#[derive(Debug, Clone)]
pub struct ToolContext {
pub broker: Arc<ProjectBroker>,
pub config: ToolConfig,
}
pub(crate) fn session_imports(imports: Vec<String>) -> Vec<String> {
if imports.iter().any(|import| import == "Init") {
imports
} else {
let mut out = Vec::with_capacity(imports.len().saturating_add(1));
out.push("Init".to_owned());
out.extend(imports);
out
}
}