playground_api/
endpoints.rs1mod 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}