mod clippy;
mod common;
mod compile;
mod crates;
mod execute;
mod format;
mod gist;
mod macro_expansion;
mod miri;
mod versions;
pub use clippy::{ClippyRequest, ClippyResponse};
pub use common::*;
pub use compile::{
AssemblyFlavor, CompileRequest, CompileResponse, CompileTarget, DemangleAssembly,
ProcessAssembly,
};
pub use crates::{CrateInformation, CratesResponse};
pub use execute::{ExecuteRequest, ExecuteResponse};
pub use format::{FormatRequest, FormatResponse};
pub use gist::{GistCreateRequest, GistResponse};
pub use macro_expansion::{MacroExpansionRequest, MacroExpansionResponse};
pub use miri::{AliasingModel, MiriRequest, MiriResponse};
pub use versions::{ChannelVersion, Version, VersionsResponse};
use serde::{de::Deserialize, Serialize};
use std::{borrow::Cow, fmt::Debug};
pub trait Request: Debug + Serialize {
fn endpoint<'a>(&self) -> Endpoints<'a>;
}
pub trait Response: Debug + for<'de> Deserialize<'de> {}
pub enum Endpoints<'a> {
Execute,
Compile,
Format,
Clippy,
Miri,
MacroExpansion,
Crates,
Versions,
GistCreate,
GistGet(&'a str),
}
impl<'a> Endpoints<'a> {
pub fn path(&self) -> Cow<'a, str> {
match self {
Self::Execute => Cow::Borrowed("execute"),
Self::Compile => Cow::Borrowed("compile"),
Self::Format => Cow::Borrowed("format"),
Self::Clippy => Cow::Borrowed("clippy"),
Self::Miri => Cow::Borrowed("miri"),
Self::Crates => Cow::Borrowed("meta/crates"),
Self::Versions => Cow::Borrowed("meta/versions"),
Self::MacroExpansion => Cow::Borrowed("macro-expansion"),
Self::GistCreate => Cow::Borrowed("meta/gist"),
Self::GistGet(id) => Cow::Owned(format!("meta/gist/{id}")),
}
}
}