playground-api 0.5.1

Simple API-binding for The Rust Playground
Documentation
//! Module which contains request and response types for the various endpoints

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}")),
        }
    }
}