use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct LeanWorkerElabOptions {
pub namespace_context: String,
pub file_label: String,
pub heartbeat_limit: u64,
pub diagnostic_byte_limit: usize,
}
impl LeanWorkerElabOptions {
#[must_use]
pub fn new() -> Self {
Self::default()
}
#[must_use]
pub fn namespace_context(mut self, namespace: &str) -> Self {
namespace.clone_into(&mut self.namespace_context);
self
}
#[must_use]
pub fn file_label(mut self, label: &str) -> Self {
label.clone_into(&mut self.file_label);
self
}
#[must_use]
pub fn heartbeat_limit(mut self, heartbeats: u64) -> Self {
self.heartbeat_limit = heartbeats;
self
}
#[must_use]
pub fn diagnostic_byte_limit(mut self, bytes: usize) -> Self {
self.diagnostic_byte_limit = bytes;
self
}
}
impl Default for LeanWorkerElabOptions {
fn default() -> Self {
Self {
namespace_context: String::new(),
file_label: "<elaborate>".to_owned(),
heartbeat_limit: lean_rs_host::LEAN_HEARTBEAT_LIMIT_DEFAULT,
diagnostic_byte_limit: lean_rs_host::LEAN_DIAGNOSTIC_BYTE_LIMIT_DEFAULT,
}
}
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct LeanWorkerElabResult {
pub success: bool,
pub diagnostics: Vec<LeanWorkerDiagnostic>,
pub truncated: bool,
}
#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum LeanWorkerKernelStatus {
Checked,
Rejected,
Unavailable,
Unsupported,
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct LeanWorkerKernelResult {
pub status: LeanWorkerKernelStatus,
pub diagnostics: Vec<LeanWorkerDiagnostic>,
pub truncated: bool,
pub summary: Option<LeanWorkerKernelSummary>,
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct LeanWorkerKernelSummary {
pub declaration_name: String,
pub kind: String,
pub type_signature: String,
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct LeanWorkerDiagnostic {
pub severity: String,
pub message: String,
pub file_label: String,
pub line: Option<u32>,
pub column: Option<u32>,
pub end_line: Option<u32>,
pub end_column: Option<u32>,
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct LeanWorkerElabFailure {
pub diagnostics: Vec<LeanWorkerDiagnostic>,
pub truncated: bool,
}
#[derive(Clone, Copy, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum LeanWorkerMetaTransparency {
#[default]
Default,
Reducible,
Instances,
All,
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct LeanWorkerRendered {
pub value: String,
pub rendering: LeanWorkerRendering,
}
#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum LeanWorkerRendering {
Pretty,
Raw,
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
#[serde(tag = "status", rename_all = "snake_case")]
pub enum LeanWorkerMetaResult<T> {
Ok { value: T },
Failed { failure: LeanWorkerElabFailure },
TimeoutOrHeartbeat { failure: LeanWorkerElabFailure },
Unsupported { failure: LeanWorkerElabFailure },
}
#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct LeanWorkerDeclarationFilter {
pub include_private: bool,
pub include_generated: bool,
pub include_internal: bool,
}
impl Default for LeanWorkerDeclarationFilter {
fn default() -> Self {
Self {
include_private: true,
include_generated: false,
include_internal: false,
}
}
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct LeanWorkerSourceRange {
pub file: String,
pub start_line: u32,
pub start_column: u32,
pub end_line: u32,
pub end_column: u32,
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct LeanWorkerDeclarationRow {
pub name: String,
pub kind: String,
pub type_signature: Option<String>,
pub source: Option<LeanWorkerSourceRange>,
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct LeanWorkerCommandInfo {
pub start_line: u32,
pub start_column: u32,
pub end_line: u32,
pub end_column: u32,
pub decl_name: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct LeanWorkerTermInfo {
pub start_line: u32,
pub start_column: u32,
pub end_line: u32,
pub end_column: u32,
pub expr_str: String,
pub type_str: String,
pub expected_type_str: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct LeanWorkerTacticInfo {
pub start_line: u32,
pub start_column: u32,
pub end_line: u32,
pub end_column: u32,
pub goals_before: Vec<String>,
pub goals_after: Vec<String>,
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct LeanWorkerNameRef {
pub start_line: u32,
pub start_column: u32,
pub end_line: u32,
pub end_column: u32,
pub name: String,
pub is_binder: bool,
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct LeanWorkerProcessedFile {
pub commands: Vec<LeanWorkerCommandInfo>,
pub terms: Vec<LeanWorkerTermInfo>,
pub tactics: Vec<LeanWorkerTacticInfo>,
pub names: Vec<LeanWorkerNameRef>,
pub diagnostics: LeanWorkerElabFailure,
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
#[serde(tag = "status", rename_all = "snake_case")]
pub enum LeanWorkerProcessFileOutcome {
Processed { file: LeanWorkerProcessedFile },
Unsupported,
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
#[serde(tag = "status", rename_all = "snake_case")]
pub enum LeanWorkerProcessModuleOutcome {
Ok {
file: LeanWorkerProcessedFile,
imports: Vec<String>,
},
MissingImports {
file: LeanWorkerProcessedFile,
imports: Vec<String>,
missing: Vec<String>,
},
HeaderParseFailed { diagnostics: LeanWorkerElabFailure },
Unsupported,
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct LeanWorkerCapabilityMetadata {
pub commands: Vec<LeanWorkerCommandMetadata>,
pub capabilities: Vec<LeanWorkerCapabilityFact>,
pub lean_version: Option<String>,
pub extra: Option<Value>,
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct LeanWorkerCommandMetadata {
pub name: String,
pub version: String,
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct LeanWorkerCapabilityFact {
pub name: String,
pub version: String,
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct LeanWorkerDoctorReport {
pub diagnostics: Vec<LeanWorkerDoctorDiagnostic>,
pub metadata: Option<Value>,
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct LeanWorkerDoctorDiagnostic {
pub severity: LeanWorkerDoctorSeverity,
pub code: String,
pub message: String,
pub details: Option<Value>,
}
#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum LeanWorkerDoctorSeverity {
Pass,
Warning,
Error,
}