playground_api/
endpoints.rs

1//! Module which contains request and response types for the various endpoints
2
3mod clippy;
4mod compile;
5mod crates;
6mod execute;
7mod format;
8mod gist;
9mod macro_expansion;
10mod miri;
11mod versions;
12
13pub use clippy::{ClippyRequest, ClippyResponse};
14pub use compile::{
15    AssemblyFlavor, CompileRequest, CompileResponse, CompileTarget, DemangleAssembly,
16    ProcessAssembly,
17};
18pub use crates::{CrateInformation, CratesResponse};
19pub use execute::{ExecuteRequest, ExecuteResponse};
20pub use format::{FormatRequest, FormatResponse};
21pub use gist::{GistCreateRequest, GistResponse};
22pub use macro_expansion::{MacroExpansionRequest, MacroExpansionResponse};
23pub use miri::{AliasingModel, MiriRequest, MiriResponse};
24pub use versions::{ChannelVersion, Version, VersionsResponse};
25
26use serde::{Deserialize, Serialize};
27
28pub(crate) enum Endpoints {
29    Execute,
30    Compile,
31    Format,
32    Clippy,
33    Miri,
34    MacroExpansion,
35    Crates,
36    Versions,
37    GistCreate,
38    GistGet(String),
39}
40
41/// Represents the Rust edition to use.
42///
43/// Each edition introduces new language features and idioms while maintaining compatibility.
44#[derive(Debug, Deserialize, Serialize, Clone, Copy, PartialEq, Eq)]
45#[cfg_attr(feature = "poise-bot", derive(poise::ChoiceParameter))]
46pub enum Edition {
47    /// Rust 2024 Edition
48    #[cfg_attr(feature = "poise-bot", name = "Edition 2024")]
49    #[serde(rename = "2024")]
50    Edition2024,
51
52    /// Rust 2021 Edition
53    #[cfg_attr(feature = "poise-bot", name = "Edition 2021")]
54    #[serde(rename = "2021")]
55    Edition2021,
56
57    /// Rust 2018 Edition
58    #[cfg_attr(feature = "poise-bot", name = "Edition 2018")]
59    #[serde(rename = "2018")]
60    Edition2018,
61
62    /// Rust 2015 Edition
63    #[cfg_attr(feature = "poise-bot", name = "Edition 2015")]
64    #[serde(rename = "2015")]
65    Edition2015,
66}
67
68/// Defines the type of crate to be compiled: binary or library.
69#[derive(Debug, Deserialize, Serialize, Clone, Copy, PartialEq, Eq)]
70#[cfg_attr(feature = "poise-bot", derive(poise::ChoiceParameter))]
71pub enum CrateType {
72    /// A binary crate with a `main` function, compiled to an executable.
73    #[serde(rename = "bin")]
74    Binary,
75
76    /// A library crate, with a specified library type.
77    #[serde(rename = "lib")]
78    Library,
79}
80
81/// Indicates whether to compile code in debug or release mode.
82#[derive(Debug, Deserialize, Serialize, Clone, Copy, PartialEq, Eq)]
83#[cfg_attr(feature = "poise-bot", derive(poise::ChoiceParameter))]
84#[serde(rename_all = "lowercase")]
85pub enum Mode {
86    /// Compile with debug information and no optimizations.
87    Debug,
88
89    /// Compile with optimizations for performance.
90    Release,
91}
92
93/// Specifies the Rust release channel to use.
94#[derive(Debug, Deserialize, Serialize, Clone, Copy, PartialEq, Eq)]
95#[cfg_attr(feature = "poise-bot", derive(poise::ChoiceParameter))]
96#[serde(rename_all = "lowercase")]
97pub enum Channel {
98    /// Stable channel – tested and officially released features.
99    Stable,
100
101    /// Beta channel – pre-release testing for the next stable release.
102    Beta,
103
104    /// Nightly channel – bleeding-edge features and experimental tools.
105    Nightly,
106}