use std::str::FromStr;
use serde::{Deserialize, Serialize};
use strum::VariantNames;
#[derive(
Debug,
Clone,
Copy,
Default,
PartialEq,
Eq,
Serialize,
Deserialize,
strum::Display,
strum::EnumString,
strum::VariantNames,
)]
#[strum(serialize_all = "lowercase", ascii_case_insensitive)]
pub enum TypeCheckingFormat {
#[default]
Full,
Concise,
Azure,
Json,
#[strum(to_string = "jsonlines", serialize = "json-lines")]
JsonLines,
Rdjson,
Pylint,
Gitlab,
Github,
}
impl TypeCheckingFormat {
pub fn from_name(name: &str) -> Result<Self, String> {
Self::from_str(name)
.map_err(|_| format!("unknown type check format '{name}', expected one of: {}", Self::names()))
}
#[must_use]
pub fn names() -> String {
Self::VARIANTS.join(", ")
}
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct TypeCheckingConfig {
pub format: TypeCheckingFormat,
pub color: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TypeCheckState {
pub committed_stubs: String,
pub pending_snippet: Option<String>,
pub config: TypeCheckingConfig,
}