src/api_schema/router.rs: implement list_subdirs() helper
This commit is contained in:
parent
062d4916ff
commit
13f1cc17ea
13
src/api2.rs
13
src/api2.rs
|
@ -34,22 +34,13 @@ pub fn router() -> Router {
|
|||
.match_all("node", node::router());
|
||||
|
||||
let route = Router::new()
|
||||
.get(ApiMethod::new(
|
||||
|| Ok(json!([
|
||||
{"subdir": "access"},
|
||||
{"subdir": "admin"},
|
||||
{"subdir": "config"},
|
||||
{"subdir": "nodes"},
|
||||
{"subdir": "subscription"},
|
||||
{"subdir": "version"},
|
||||
])),
|
||||
ObjectSchema::new("Directory index.")))
|
||||
.subdir("access", access::router())
|
||||
.subdir("admin", admin::router())
|
||||
.subdir("config", config::router())
|
||||
.subdir("nodes", nodes)
|
||||
.subdir("subscription", subscription::router())
|
||||
.subdir("version", version::router());
|
||||
.subdir("version", version::router())
|
||||
.list_subdirs();
|
||||
|
||||
route
|
||||
}
|
||||
|
|
|
@ -69,11 +69,6 @@ fn create_ticket(
|
|||
pub fn router() -> Router {
|
||||
|
||||
let route = Router::new()
|
||||
.get(ApiMethod::new(
|
||||
|| Ok(json!([
|
||||
{"subdir": "ticket"}
|
||||
])),
|
||||
ObjectSchema::new("Directory index.")))
|
||||
.subdir(
|
||||
"ticket",
|
||||
Router::new()
|
||||
|
@ -97,7 +92,8 @@ pub fn router() -> Router {
|
|||
.required("CSRFPreventionToken", StringSchema::new("Cross Site Request Forgery Prevention Token."))
|
||||
).protected(true)
|
||||
)
|
||||
);
|
||||
)
|
||||
.list_subdirs();
|
||||
|
||||
route
|
||||
}
|
||||
|
|
|
@ -7,12 +7,8 @@ pub mod datastore;
|
|||
pub fn router() -> Router {
|
||||
|
||||
let route = Router::new()
|
||||
.get(ApiMethod::new(
|
||||
|| Ok(json!([
|
||||
{"subdir": "datastore"}
|
||||
])),
|
||||
ObjectSchema::new("Directory index.")))
|
||||
.subdir("datastore", datastore::router());
|
||||
.subdir("datastore", datastore::router())
|
||||
.list_subdirs();
|
||||
|
||||
route
|
||||
}
|
||||
|
|
|
@ -387,19 +387,6 @@ pub fn router() -> Router {
|
|||
);
|
||||
|
||||
let datastore_info = Router::new()
|
||||
.get(ApiMethod::new(
|
||||
|| Ok(json!([
|
||||
{"subdir": "backups" },
|
||||
{"subdir": "pxar" },
|
||||
{"subdir": "gc" },
|
||||
{"subdir": "groups" },
|
||||
{"subdir": "snapshots" },
|
||||
//{"subdir": "status" },
|
||||
{"subdir": "prune" },
|
||||
])),
|
||||
ObjectSchema::new("Directory index.")
|
||||
.required("store", store_schema.clone()))
|
||||
)
|
||||
.subdir(
|
||||
"backups",
|
||||
Router::new()
|
||||
|
@ -470,7 +457,9 @@ pub fn router() -> Router {
|
|||
.subdir(
|
||||
"prune",
|
||||
Router::new()
|
||||
.post(api_method_prune()));
|
||||
.post(api_method_prune())
|
||||
)
|
||||
.list_subdirs();
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
//use failure::*;
|
||||
//use std::collections::HashMap;
|
||||
|
||||
use crate::api_schema::*;
|
||||
//use crate::api_schema;
|
||||
use crate::api_schema::router::*;
|
||||
use serde_json::{json};
|
||||
|
||||
|
@ -10,12 +10,8 @@ pub mod datastore;
|
|||
pub fn router() -> Router {
|
||||
|
||||
let route = Router::new()
|
||||
.get(ApiMethod::new(
|
||||
|| Ok(json!([
|
||||
{"subdir": "datastore"},
|
||||
])),
|
||||
ObjectSchema::new("Directory index.")))
|
||||
.subdir("datastore", datastore::router());
|
||||
.subdir("datastore", datastore::router())
|
||||
.list_subdirs();
|
||||
|
||||
|
||||
route
|
||||
|
|
|
@ -34,21 +34,13 @@ lazy_static!{
|
|||
pub fn router() -> Router {
|
||||
|
||||
let route = Router::new()
|
||||
.get(ApiMethod::new(
|
||||
|| Ok(json!([
|
||||
{"subdir": "dns"},
|
||||
{"subdir": "network"},
|
||||
{"subdir": "services"},
|
||||
{"subdir": "syslog"},
|
||||
{"subdir": "time"},
|
||||
])),
|
||||
ObjectSchema::new("Directory index.")))
|
||||
.subdir("dns", dns::router())
|
||||
.subdir("network", network::router())
|
||||
.subdir("services", services::router())
|
||||
.subdir("syslog", syslog::router())
|
||||
.subdir("tasks", tasks::router())
|
||||
.subdir("time", time::router());
|
||||
.subdir("time", time::router())
|
||||
.list_subdirs();
|
||||
|
||||
route
|
||||
}
|
||||
|
|
|
@ -223,18 +223,6 @@ pub fn router() -> Router {
|
|||
);
|
||||
|
||||
let service_api = Router::new()
|
||||
.get(ApiMethod::new(
|
||||
|| {
|
||||
let mut result = vec![];
|
||||
for cmd in &["state", "start", "stop", "restart", "reload"] {
|
||||
result.push(json!({"subdir": cmd }));
|
||||
}
|
||||
Ok(Value::from(result))
|
||||
},
|
||||
ObjectSchema::new("Directory index.")
|
||||
.required("node", crate::api2::node::NODE_SCHEMA.clone())
|
||||
.required("service", service_id_schema.clone()))
|
||||
)
|
||||
.subdir(
|
||||
"state",
|
||||
Router::new()
|
||||
|
@ -293,7 +281,7 @@ pub fn router() -> Router {
|
|||
).protected(true)
|
||||
)
|
||||
)
|
||||
;
|
||||
.list_subdirs();
|
||||
|
||||
let route = Router::new()
|
||||
.get(
|
||||
|
|
|
@ -174,18 +174,6 @@ pub fn router() -> Router {
|
|||
);
|
||||
|
||||
let upid_api = Router::new()
|
||||
.get(ApiMethod::new(
|
||||
|| {
|
||||
let mut result = vec![];
|
||||
for cmd in &["log", "status"] {
|
||||
result.push(json!({"subdir": cmd }));
|
||||
}
|
||||
Ok(Value::from(result))
|
||||
},
|
||||
ObjectSchema::new("Directory index.")
|
||||
.required("node", crate::api2::node::NODE_SCHEMA.clone())
|
||||
.required("upid", upid_schema.clone()))
|
||||
)
|
||||
.delete(ApiMethod::new(
|
||||
stop_task,
|
||||
ObjectSchema::new("Try to stop a task.")
|
||||
|
@ -225,7 +213,8 @@ pub fn router() -> Router {
|
|||
.required("node", crate::api2::node::NODE_SCHEMA.clone())
|
||||
.required("upid", upid_schema.clone()))
|
||||
)
|
||||
);
|
||||
)
|
||||
.list_subdirs();
|
||||
|
||||
|
||||
let route = Router::new()
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
use failure::*;
|
||||
|
||||
use crate::api_schema::*;
|
||||
use serde_json::{Value};
|
||||
use serde_json::{json, Value};
|
||||
use std::collections::HashMap;
|
||||
use std::sync::Arc;
|
||||
use std::fmt;
|
||||
|
@ -229,6 +229,24 @@ impl Router {
|
|||
self
|
||||
}
|
||||
|
||||
pub fn list_subdirs(self) -> Self {
|
||||
match self.get {
|
||||
MethodDefinition::None => {},
|
||||
_ => panic!("cannot create directory index - method get already in use"),
|
||||
}
|
||||
match self.subroute {
|
||||
SubRoute::Hash(ref map) => {
|
||||
let index = json!(map.keys().map(|s| json!({ "subdira": s}))
|
||||
.collect::<Vec<Value>>());
|
||||
self.get(ApiMethod::new(
|
||||
move || { Ok(index.clone()) },
|
||||
ObjectSchema::new("Directory index.").additional_properties(true))
|
||||
)
|
||||
}
|
||||
_ => panic!("cannot create directory index (no SubRoute::Hash)"),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get(mut self, m: ApiMethod) -> Self {
|
||||
self.get = MethodDefinition::Simple(m);
|
||||
self
|
||||
|
|
Loading…
Reference in New Issue