use super::Edition;
use serde::{Deserialize, Serialize};
use std::borrow::Cow;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct MiriRequest<'a> {
pub code: Cow<'a, str>,
pub edition: Edition,
pub tests: bool,
#[serde(rename = "aliasingModel")]
pub aliasing_model: Option<AliasingModel>,
}
impl<'a> MiriRequest<'a> {
pub fn new(
code: Cow<'a, str>,
edition: Edition,
tests: bool,
aliasing_model: Option<AliasingModel>,
) -> Self {
Self {
code,
edition,
tests,
aliasing_model,
}
}
}
impl<'b> super::Request for MiriRequest<'b> {
fn endpoint<'a>(&self) -> super::Endpoints<'a> {
super::Endpoints::Miri
}
}
impl<'a> Default for MiriRequest<'a> {
fn default() -> Self {
Self {
code: Cow::Borrowed("fn main() { println!(\"Hello, world!\"); }"),
edition: Edition::Edition2024,
tests: false,
aliasing_model: Some(AliasingModel::Stacked),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct MiriResponse<'a> {
pub success: bool,
pub exit_detail: Cow<'a, str>,
pub stdout: Cow<'a, str>,
pub stderr: Cow<'a, str>,
}
impl<'a> super::Response for MiriResponse<'a> {}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "poise-bot", derive(poise::ChoiceParameter))]
#[serde(rename_all = "lowercase")]
pub enum AliasingModel {
Stacked,
Tree,
}