playground_api/
endpoints.rs

1//! Module which contains request and response types for the various endpoints
2
3mod clippy;
4mod common;
5mod compile;
6mod crates;
7mod execute;
8mod format;
9mod gist;
10mod macro_expansion;
11mod miri;
12mod versions;
13
14pub use clippy::{ClippyRequest, ClippyResponse};
15pub use common::*;
16pub use compile::{
17    AssemblyFlavor, CompileRequest, CompileResponse, CompileTarget, DemangleAssembly,
18    ProcessAssembly,
19};
20pub use crates::{CrateInformation, CratesResponse};
21pub use execute::{ExecuteRequest, ExecuteResponse};
22pub use format::{FormatRequest, FormatResponse};
23pub use gist::{GistCreateRequest, GistResponse};
24pub use macro_expansion::{MacroExpansionRequest, MacroExpansionResponse};
25pub use miri::{AliasingModel, MiriRequest, MiriResponse};
26pub use versions::{ChannelVersion, Version, VersionsResponse};
27
28use serde::{de::Deserialize, Serialize};
29use std::{borrow::Cow, fmt::Debug};
30
31pub trait Request: Debug + Serialize {
32    fn endpoint<'a>(&self) -> Endpoints<'a>;
33}
34
35pub trait Response: Debug + for<'de> Deserialize<'de> {}
36
37pub enum Endpoints<'a> {
38    Execute,
39    Compile,
40    Format,
41    Clippy,
42    Miri,
43    MacroExpansion,
44    Crates,
45    Versions,
46    GistCreate,
47    GistGet(&'a str),
48}
49
50impl<'a> Endpoints<'a> {
51    pub fn path(&self) -> Cow<'a, str> {
52        match self {
53            Self::Execute => Cow::Borrowed("execute"),
54            Self::Compile => Cow::Borrowed("compile"),
55            Self::Format => Cow::Borrowed("format"),
56            Self::Clippy => Cow::Borrowed("clippy"),
57            Self::Miri => Cow::Borrowed("miri"),
58            Self::Crates => Cow::Borrowed("meta/crates"),
59            Self::Versions => Cow::Borrowed("meta/versions"),
60            Self::MacroExpansion => Cow::Borrowed("macro-expansion"),
61            Self::GistCreate => Cow::Borrowed("meta/gist"),
62            Self::GistGet(id) => Cow::Owned(format!("meta/gist/{id}")),
63        }
64    }
65}