about summary refs log tree commit diff stats
path: root/src/smd/endpoints.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/smd/endpoints.rs')
-rw-r--r--src/smd/endpoints.rs36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/smd/endpoints.rs b/src/smd/endpoints.rs
index 8b13789..48c9720 100644
--- a/src/smd/endpoints.rs
+++ b/src/smd/endpoints.rs
@@ -1 +1,37 @@
+use super::{
+    Config,
+    context::{SalarymanDContext, StdinBuffer},
+};
+use dropshot::{HttpError, HttpResponseOk, RequestContext, TypedBody, endpoint};
+use std::sync::Arc;
 
+#[endpoint {
+    method = GET,
+    path = "/config",
+}]
+pub async fn endpoint_get_config(
+    rqctx: RequestContext<Arc<SalarymanDContext>>,
+) -> Result<HttpResponseOk<Config>, HttpError> {
+    Ok(HttpResponseOk(rqctx.context().config.clone()))
+}
+
+#[endpoint {
+    method = PUT,
+    path = "/services/write"
+}]
+pub async fn endpoint_post_stdin(
+    rqctx: RequestContext<Arc<SalarymanDContext>>,
+    update: TypedBody<StdinBuffer>,
+) -> Result<HttpResponseOk<()>, HttpError> {
+    let ctx = rqctx.context();
+    let stdin_str = update.into_inner();
+    for i in 0..ctx.service.len() {
+        let mut lock = ctx.service[i].lock().await;
+        if lock.started().await {
+            lock.writeln_stdin(stdin_str.string.clone()).await.unwrap(); //TODO: PROPERLY HANDLE ERROR!
+        }
+        drop(lock);
+    }
+
+    Ok(HttpResponseOk(()))
+}