]> git.proxmox.com Git - proxmox-backup.git/commitdiff
move src/server/formatter.rs to proxmox-rest-server crate
authorDietmar Maurer <dietmar@proxmox.com>
Tue, 21 Sep 2021 05:58:43 +0000 (07:58 +0200)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Tue, 21 Sep 2021 06:46:41 +0000 (08:46 +0200)
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
proxmox-rest-server/src/formatter.rs [new file with mode: 0644]
proxmox-rest-server/src/lib.rs
src/api2/admin/datastore.rs
src/api2/backup/environment.rs
src/api2/reader/environment.rs
src/server/formatter.rs [deleted file]
src/server/h2service.rs
src/server/mod.rs
src/server/rest.rs

diff --git a/proxmox-rest-server/src/formatter.rs b/proxmox-rest-server/src/formatter.rs
new file mode 100644 (file)
index 0000000..8818e67
--- /dev/null
@@ -0,0 +1,126 @@
+use anyhow::{Error};
+use serde_json::{json, Value};
+
+use hyper::{Body, Response, StatusCode};
+use hyper::header;
+
+use proxmox::api::{HttpError, RpcEnvironment};
+
+/// Extension to set error message for server side logging
+pub struct ErrorMessageExtension(pub String);
+
+pub struct OutputFormatter {
+
+    pub format_data: fn(data: Value, rpcenv: &dyn RpcEnvironment) -> Response<Body>,
+
+    pub format_error: fn(err: Error) -> Response<Body>,
+}
+
+static JSON_CONTENT_TYPE: &str = "application/json;charset=UTF-8";
+
+pub fn json_response(result: Result<Value, Error>) -> Response<Body> {
+    match result {
+        Ok(data) => json_data_response(data),
+        Err(err) => json_error_response(err),
+    }
+}
+
+pub fn json_data_response(data: Value) -> Response<Body> {
+
+    let json_str = data.to_string();
+
+    let raw = json_str.into_bytes();
+
+    let mut response = Response::new(raw.into());
+    response.headers_mut().insert(
+        header::CONTENT_TYPE,
+        header::HeaderValue::from_static(JSON_CONTENT_TYPE));
+
+    response
+}
+
+fn add_result_attributes(result: &mut Value, rpcenv: &dyn RpcEnvironment)
+{
+    let attributes = match rpcenv.result_attrib().as_object() {
+        Some(attr) => attr,
+        None => return,
+    };
+
+    for (key, value) in attributes {
+        result[key] = value.clone();
+    }
+}
+
+fn json_format_data(data: Value, rpcenv: &dyn RpcEnvironment) -> Response<Body> {
+
+    let mut result = json!({
+        "data": data
+    });
+
+    add_result_attributes(&mut result, rpcenv);
+
+    json_data_response(result)
+}
+
+pub fn json_error_response(err: Error) -> Response<Body> {
+
+    let mut response = if let Some(apierr) = err.downcast_ref::<HttpError>() {
+        let mut resp = Response::new(Body::from(apierr.message.clone()));
+        *resp.status_mut() = apierr.code;
+        resp
+    } else {
+        let mut resp = Response::new(Body::from(err.to_string()));
+        *resp.status_mut() = StatusCode::BAD_REQUEST;
+        resp
+    };
+
+    response.headers_mut().insert(
+        header::CONTENT_TYPE,
+        header::HeaderValue::from_static(JSON_CONTENT_TYPE));
+
+    response.extensions_mut().insert(ErrorMessageExtension(err.to_string()));
+
+    response
+}
+
+pub static JSON_FORMATTER: OutputFormatter = OutputFormatter {
+    format_data: json_format_data,
+    format_error: json_error_response,
+};
+
+fn extjs_format_data(data: Value, rpcenv: &dyn RpcEnvironment) -> Response<Body> {
+
+    let mut result = json!({
+        "data": data,
+        "success": true
+    });
+
+    add_result_attributes(&mut result, rpcenv);
+
+    json_data_response(result)
+}
+
+fn extjs_format_error(err: Error) -> Response<Body> {
+
+    let mut errors = vec![];
+
+    let message = err.to_string();
+    errors.push(&message);
+
+    let result = json!({
+        "message": message,
+        "errors": errors,
+        "success": false
+    });
+
+    let mut response = json_data_response(result);
+
+    response.extensions_mut().insert(ErrorMessageExtension(message));
+
+    response
+}
+
+pub static EXTJS_FORMATTER: OutputFormatter = OutputFormatter {
+    format_data: extjs_format_data,
+    format_error: extjs_format_error,
+};
index 42e78d89c0e4341a7468b55b6b676c5210def11d..bc8334ba696cb9f883e83edcc32c167f8344630a 100644 (file)
@@ -5,6 +5,7 @@ use anyhow::{bail, format_err, Error};
 use proxmox::tools::fd::Fd;
 
 pub mod daemon;
+pub mod formatter;
 
 mod environment;
 pub use environment::*;
index dc1c0ae9bbd81f71cbe00d81697952005048c4b9..20aca6fb786025a4c164e0d40e00c688200c5966 100644 (file)
@@ -54,6 +54,7 @@ use pbs_tools::blocking::WrappedReaderStream;
 use pbs_tools::stream::{AsyncReaderStream, AsyncChannelWriter};
 use pbs_tools::json::{required_integer_param, required_string_param};
 use pbs_config::CachedUserInfo;
+use proxmox_rest_server::formatter;
 
 use crate::api2::node::rrd::create_value_from_rrd;
 use crate::backup::{
@@ -1326,7 +1327,7 @@ pub fn upload_backup_log(
         replace_file(&path, blob.raw_data(), CreateOptions::new())?;
 
         // fixme: use correct formatter
-        Ok(crate::server::formatter::json_response(Ok(Value::Null)))
+        Ok(formatter::json_response(Ok(Value::Null)))
     }.boxed()
 }
 
index 1766639e70e387829cd375188bc30c40774f120b..129ebd2be5d9479b832334e8f946e20d39d06c2a 100644 (file)
@@ -15,10 +15,10 @@ use pbs_datastore::backup_info::{BackupDir, BackupInfo};
 use pbs_datastore::dynamic_index::DynamicIndexWriter;
 use pbs_datastore::fixed_index::FixedIndexWriter;
 use pbs_api_types::Authid;
+use proxmox_rest_server::formatter::*;
 
 use crate::backup::{verify_backup_dir_with_lock, DataStore};
 use crate::server::WorkerTask;
-use crate::server::formatter::*;
 use hyper::{Body, Response};
 
 #[derive(Copy, Clone, Serialize)]
index 64a01c4db4bccd597bc9802e015c114758df75d9..f7d79072df8d9a21991be440e81df97c1b4dd350 100644 (file)
@@ -7,9 +7,9 @@ use proxmox::api::{RpcEnvironment, RpcEnvironmentType};
 
 use pbs_datastore::backup_info::BackupDir;
 use pbs_api_types::Authid;
+use proxmox_rest_server::formatter::*;
 
 use crate::backup::DataStore;
-use crate::server::formatter::*;
 use crate::server::WorkerTask;
 
 //use proxmox::tools;
diff --git a/src/server/formatter.rs b/src/server/formatter.rs
deleted file mode 100644 (file)
index 8818e67..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-use anyhow::{Error};
-use serde_json::{json, Value};
-
-use hyper::{Body, Response, StatusCode};
-use hyper::header;
-
-use proxmox::api::{HttpError, RpcEnvironment};
-
-/// Extension to set error message for server side logging
-pub struct ErrorMessageExtension(pub String);
-
-pub struct OutputFormatter {
-
-    pub format_data: fn(data: Value, rpcenv: &dyn RpcEnvironment) -> Response<Body>,
-
-    pub format_error: fn(err: Error) -> Response<Body>,
-}
-
-static JSON_CONTENT_TYPE: &str = "application/json;charset=UTF-8";
-
-pub fn json_response(result: Result<Value, Error>) -> Response<Body> {
-    match result {
-        Ok(data) => json_data_response(data),
-        Err(err) => json_error_response(err),
-    }
-}
-
-pub fn json_data_response(data: Value) -> Response<Body> {
-
-    let json_str = data.to_string();
-
-    let raw = json_str.into_bytes();
-
-    let mut response = Response::new(raw.into());
-    response.headers_mut().insert(
-        header::CONTENT_TYPE,
-        header::HeaderValue::from_static(JSON_CONTENT_TYPE));
-
-    response
-}
-
-fn add_result_attributes(result: &mut Value, rpcenv: &dyn RpcEnvironment)
-{
-    let attributes = match rpcenv.result_attrib().as_object() {
-        Some(attr) => attr,
-        None => return,
-    };
-
-    for (key, value) in attributes {
-        result[key] = value.clone();
-    }
-}
-
-fn json_format_data(data: Value, rpcenv: &dyn RpcEnvironment) -> Response<Body> {
-
-    let mut result = json!({
-        "data": data
-    });
-
-    add_result_attributes(&mut result, rpcenv);
-
-    json_data_response(result)
-}
-
-pub fn json_error_response(err: Error) -> Response<Body> {
-
-    let mut response = if let Some(apierr) = err.downcast_ref::<HttpError>() {
-        let mut resp = Response::new(Body::from(apierr.message.clone()));
-        *resp.status_mut() = apierr.code;
-        resp
-    } else {
-        let mut resp = Response::new(Body::from(err.to_string()));
-        *resp.status_mut() = StatusCode::BAD_REQUEST;
-        resp
-    };
-
-    response.headers_mut().insert(
-        header::CONTENT_TYPE,
-        header::HeaderValue::from_static(JSON_CONTENT_TYPE));
-
-    response.extensions_mut().insert(ErrorMessageExtension(err.to_string()));
-
-    response
-}
-
-pub static JSON_FORMATTER: OutputFormatter = OutputFormatter {
-    format_data: json_format_data,
-    format_error: json_error_response,
-};
-
-fn extjs_format_data(data: Value, rpcenv: &dyn RpcEnvironment) -> Response<Body> {
-
-    let mut result = json!({
-        "data": data,
-        "success": true
-    });
-
-    add_result_attributes(&mut result, rpcenv);
-
-    json_data_response(result)
-}
-
-fn extjs_format_error(err: Error) -> Response<Body> {
-
-    let mut errors = vec![];
-
-    let message = err.to_string();
-    errors.push(&message);
-
-    let result = json!({
-        "message": message,
-        "errors": errors,
-        "success": false
-    });
-
-    let mut response = json_data_response(result);
-
-    response.extensions_mut().insert(ErrorMessageExtension(message));
-
-    response
-}
-
-pub static EXTJS_FORMATTER: OutputFormatter = OutputFormatter {
-    format_data: extjs_format_data,
-    format_error: extjs_format_error,
-};
index 332b3b1a860e4080860fa5527db6c695dfc2f1b0..a79387c003a60d49b6a41e9e167f315a243ec702 100644 (file)
@@ -11,8 +11,9 @@ use hyper::{Body, Request, Response, StatusCode};
 use proxmox::api::{ApiResponseFuture, HttpError, Router, RpcEnvironment};
 use proxmox::http_err;
 
+use proxmox_rest_server::formatter::*;
+
 use crate::tools;
-use crate::server::formatter::*;
 use crate::server::WorkerTask;
 
 /// Hyper Service implementation to handle stateful H2 connections.
index c426383f4d5a1272e649efce1489a3fc91f0b094..1fc575758c48678207856a26e57af04307399685 100644 (file)
@@ -55,8 +55,6 @@ pub use worker_task::*;
 mod h2service;
 pub use h2service::*;
 
-pub mod formatter;
-
 #[macro_use]
 pub mod rest;
 
index 6af6fa55d4548659e37d578ba5d06611915251de..8beecb5527568510600a94a38a89e83779fa2681 100644 (file)
@@ -35,8 +35,7 @@ use pbs_tools::compression::{DeflateEncoder, Level};
 use pbs_tools::stream::AsyncReaderStream;
 use pbs_api_types::{Authid, Userid};
 use proxmox_rest_server::{ApiConfig, FileLogger, FileLogOptions, AuthError, RestEnvironment};
-
-use super::formatter::*;
+use proxmox_rest_server::formatter::*;
 
 use crate::auth_helpers::*;
 use pbs_config::CachedUserInfo;