58 lines
1.4 KiB
Rust
58 lines
1.4 KiB
Rust
pub(crate) mod list;
|
|
pub mod user;
|
|
|
|
use http::Method;
|
|
use serde::de::DeserializeOwned;
|
|
use serde::{Deserialize, Serialize};
|
|
use ts_rs::TS;
|
|
|
|
#[cfg(target_arch = "wasm32")]
|
|
use wasm_bindgen::prelude::*;
|
|
|
|
#[cfg_attr(target_arch = "wasm32", wasm_bindgen(getter_with_clone))]
|
|
#[derive(Clone, Debug, Serialize, Deserialize, TS)]
|
|
pub struct ResponseError {
|
|
pub kind: ErrorKind,
|
|
pub status: Option<u16>,
|
|
pub code: String,
|
|
pub message: String,
|
|
}
|
|
|
|
#[cfg_attr(target_arch = "wasm32", wasm_bindgen)]
|
|
#[derive(Copy, Clone, Default, Debug, Serialize, Deserialize, TS)]
|
|
pub enum ErrorKind {
|
|
#[default]
|
|
ApiError,
|
|
Other,
|
|
}
|
|
|
|
#[derive(Clone, Debug, Serialize, Deserialize, TS)]
|
|
pub struct Empty;
|
|
|
|
impl From<Empty> for () {
|
|
fn from(_: Empty) -> Self {}
|
|
}
|
|
|
|
pub trait Endpoint {
|
|
const NAME: &'static str;
|
|
const ENDPOINT: &'static str;
|
|
const METHOD: Method;
|
|
|
|
type Request: Serialize + DeserializeOwned + Send + Sync + 'static;
|
|
type Response: Serialize + DeserializeOwned + Send + Sync + 'static;
|
|
|
|
fn default_response() -> Option<Self::Response> {
|
|
None
|
|
}
|
|
|
|
fn template_path<'a>(&self, base_path: &str, var: &impl AsRef<[(&'a str, &'a str)]>) -> String {
|
|
let mut path_suffix = Self::ENDPOINT.to_string();
|
|
|
|
for (key, value) in var.as_ref() {
|
|
path_suffix = path_suffix.replace(&format!(":{}", key), value);
|
|
}
|
|
|
|
format!("{}{}", base_path, path_suffix)
|
|
}
|
|
}
|