aboutsummaryrefslogtreecommitdiff
path: root/server/src/routes/api/mod.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2023-02-19 16:17:13 +0100
committermetamuffin <metamuffin@disroot.org>2023-02-19 16:17:13 +0100
commit3edddb0aea423a6f41da7597aec1836b015bc6bb (patch)
treef1df038aae2a89037f71ae8fc4342b88df3d210d /server/src/routes/api/mod.rs
parent5a1ff49fe38451451a55266e86a9e9aedecfb44d (diff)
downloadjellything-3edddb0aea423a6f41da7597aec1836b015bc6bb.tar
jellything-3edddb0aea423a6f41da7597aec1836b015bc6bb.tar.bz2
jellything-3edddb0aea423a6f41da7597aec1836b015bc6bb.tar.zst
api errors in json
Diffstat (limited to 'server/src/routes/api/mod.rs')
-rw-r--r--server/src/routes/api/mod.rs36
1 files changed, 23 insertions, 13 deletions
diff --git a/server/src/routes/api/mod.rs b/server/src/routes/api/mod.rs
index 5f48873..06c38cf 100644
--- a/server/src/routes/api/mod.rs
+++ b/server/src/routes/api/mod.rs
@@ -9,9 +9,15 @@ use crate::{
routes::{api::error::ApiResult, ui::account::session::Session},
};
use anyhow::Context;
-use rocket::{get, http::CookieJar, post, serde::json::Json, State};
+use jellycommon::api::ApiNode;
+use rocket::{get, http::CookieJar, post, response::Redirect, serde::json::Json, State};
use serde_json::{json, Value};
+#[get("/api")]
+pub fn r_api_root() -> Redirect {
+ Redirect::moved("https://codeberg.org/metamuffin/jellything/src/branch/master/api.md")
+}
+
#[get("/api/version")]
pub fn r_api_version() -> &'static str {
"1"
@@ -32,20 +38,24 @@ pub fn r_api_library_node(
_sess: Session,
path: PathBuf,
library: &State<Library>,
-) -> ApiResult<Value> {
+) -> ApiResult<Json<ApiNode>> {
let node = library
.nested_path(&path)
.context("retrieving library node")?;
- match node.as_ref() {
- Node::Directory(d) => Ok(json!({
- "identifier": d.identifier,
- "info": d.info,
- "children": d.children.iter().map(|c| c.identifier().to_string()).collect::<Vec<_>>()
- })),
- Node::Item(i) => Ok(json!({
- "identifier": i.identifier,
- "info": i.info,
- })),
- }
+ Ok(Json(match node.as_ref() {
+ Node::Directory(d) => ApiNode::Directory {
+ identifier: d.identifier.clone(),
+ info: d.info.clone(),
+ children: d
+ .children
+ .iter()
+ .map(|c| c.identifier().to_string())
+ .collect::<Vec<_>>(),
+ },
+ Node::Item(i) => ApiNode::Item {
+ identifier: i.identifier.clone(),
+ info: i.info.clone(),
+ },
+ }))
}