You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iggy.apache.org by hg...@apache.org on 2026/03/27 11:11:41 UTC
(iggy) 04/07: refactor(server): extract shared HTTP DTOs to iggy_common
This is an automated email from the ASF dual-hosted git repository.
hgruszecki pushed a commit to branch refactor-binary-7-sdk-and-http
in repository https://gitbox.apache.org/repos/asf/iggy.git
commit 45545c8efd26cb7614954855c771075123d76c64
Author: Hubert Gruszecki <h....@gmail.com>
AuthorDate: Thu Mar 26 19:53:56 2026 +0100
refactor(server): extract shared HTTP DTOs to iggy_common
SDK and server HTTP handlers each defined private copies of
the same request/response structs (LoginUser, GetSnapshot,
StoreConsumerOffset, etc.) with only Serialize or Deserialize.
This duplication meant field additions required coordinated
changes in two places.
Create 7 shared DTOs in iggy_common::http with both Serialize
and Deserialize, then delete the 11 local copies from SDK and
server. Also delete the empty types::command module (remnant
of the now-removed Command trait).
Net -88 lines across 24 files.
---
.../delete_consumer_offset.rs} | 13 +++++----
.../get_consumer_offset.rs} | 16 +++++++----
core/common/src/http/consumer_offsets/mod.rs | 4 +++
.../store_consumer_offset.rs} | 16 +++++++----
.../mod.rs => messages/flush_unsaved_buffer.rs} | 13 +++++----
core/common/src/http/messages/mod.rs | 1 +
.../login_with_personal_access_token.rs} | 14 ++++++----
core/common/src/http/personal_access_tokens/mod.rs | 1 +
.../http/{users/mod.rs => system/get_snapshot.rs} | 15 ++++++----
core/common/src/http/system/mod.rs | 2 ++
.../src/http/users/{mod.rs => login_user.rs} | 19 +++++++++----
core/common/src/http/users/mod.rs | 1 +
core/common/src/lib.rs | 2 ++
core/common/src/types/command/mod.rs | 17 ------------
core/common/src/types/mod.rs | 1 -
core/sdk/src/http/consumer_offsets.rs | 23 +++-------------
core/sdk/src/http/messages.rs | 10 ++-----
core/sdk/src/http/personal_access_tokens.rs | 10 ++-----
core/sdk/src/http/system.rs | 10 ++-----
core/sdk/src/http/users.rs | 13 ++-------
core/server/src/http/consumer_offsets.rs | 32 ++++------------------
core/server/src/http/personal_access_tokens.rs | 11 ++------
core/server/src/http/system.rs | 15 ++--------
core/server/src/http/users.rs | 11 ++------
24 files changed, 102 insertions(+), 168 deletions(-)
diff --git a/core/common/src/http/users/mod.rs b/core/common/src/http/consumer_offsets/delete_consumer_offset.rs
similarity index 82%
copy from core/common/src/http/users/mod.rs
copy to core/common/src/http/consumer_offsets/delete_consumer_offset.rs
index 7d70c2720..48436f334 100644
--- a/core/common/src/http/users/mod.rs
+++ b/core/common/src/http/consumer_offsets/delete_consumer_offset.rs
@@ -16,9 +16,10 @@
* under the License.
*/
-pub mod change_password;
-pub mod create_user;
-pub mod defaults;
-pub mod delete_user;
-pub mod update_permissions;
-pub mod update_user;
+use serde::{Deserialize, Serialize};
+
+#[derive(Debug, Serialize, Deserialize)]
+pub struct DeleteConsumerOffset {
+ #[serde(default)]
+ pub partition_id: Option<u32>,
+}
diff --git a/core/common/src/http/users/mod.rs b/core/common/src/http/consumer_offsets/get_consumer_offset.rs
similarity index 74%
copy from core/common/src/http/users/mod.rs
copy to core/common/src/http/consumer_offsets/get_consumer_offset.rs
index 7d70c2720..cfce212bc 100644
--- a/core/common/src/http/users/mod.rs
+++ b/core/common/src/http/consumer_offsets/get_consumer_offset.rs
@@ -16,9 +16,13 @@
* under the License.
*/
-pub mod change_password;
-pub mod create_user;
-pub mod defaults;
-pub mod delete_user;
-pub mod update_permissions;
-pub mod update_user;
+use crate::Consumer;
+use serde::{Deserialize, Serialize};
+
+#[derive(Debug, Serialize, Deserialize)]
+pub struct GetConsumerOffset {
+ #[serde(flatten)]
+ pub consumer: Consumer,
+ #[serde(default, skip_serializing_if = "Option::is_none")]
+ pub partition_id: Option<u32>,
+}
diff --git a/core/common/src/http/consumer_offsets/mod.rs b/core/common/src/http/consumer_offsets/mod.rs
index 31bd66e6e..5001595f6 100644
--- a/core/common/src/http/consumer_offsets/mod.rs
+++ b/core/common/src/http/consumer_offsets/mod.rs
@@ -15,3 +15,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
+pub mod delete_consumer_offset;
+pub mod get_consumer_offset;
+pub mod store_consumer_offset;
diff --git a/core/common/src/http/users/mod.rs b/core/common/src/http/consumer_offsets/store_consumer_offset.rs
similarity index 76%
copy from core/common/src/http/users/mod.rs
copy to core/common/src/http/consumer_offsets/store_consumer_offset.rs
index 7d70c2720..c1e1a5f76 100644
--- a/core/common/src/http/users/mod.rs
+++ b/core/common/src/http/consumer_offsets/store_consumer_offset.rs
@@ -16,9 +16,13 @@
* under the License.
*/
-pub mod change_password;
-pub mod create_user;
-pub mod defaults;
-pub mod delete_user;
-pub mod update_permissions;
-pub mod update_user;
+use crate::Consumer;
+use serde::{Deserialize, Serialize};
+
+#[derive(Debug, Serialize, Deserialize)]
+pub struct StoreConsumerOffset {
+ #[serde(flatten)]
+ pub consumer: Consumer,
+ pub partition_id: Option<u32>,
+ pub offset: u64,
+}
diff --git a/core/common/src/http/users/mod.rs b/core/common/src/http/messages/flush_unsaved_buffer.rs
similarity index 83%
copy from core/common/src/http/users/mod.rs
copy to core/common/src/http/messages/flush_unsaved_buffer.rs
index 7d70c2720..a0c8720e9 100644
--- a/core/common/src/http/users/mod.rs
+++ b/core/common/src/http/messages/flush_unsaved_buffer.rs
@@ -16,9 +16,10 @@
* under the License.
*/
-pub mod change_password;
-pub mod create_user;
-pub mod defaults;
-pub mod delete_user;
-pub mod update_permissions;
-pub mod update_user;
+use serde::{Deserialize, Serialize};
+
+#[derive(Debug, Serialize, Deserialize)]
+pub struct FlushUnsavedBuffer {
+ pub partition_id: u32,
+ pub fsync: bool,
+}
diff --git a/core/common/src/http/messages/mod.rs b/core/common/src/http/messages/mod.rs
index ba2da6a3f..105ca06d8 100644
--- a/core/common/src/http/messages/mod.rs
+++ b/core/common/src/http/messages/mod.rs
@@ -15,5 +15,6 @@
// specific language governing permissions and limitations
// under the License.
+pub mod flush_unsaved_buffer;
pub mod poll_messages;
pub mod send_messages;
diff --git a/core/common/src/http/users/mod.rs b/core/common/src/http/personal_access_tokens/login_with_personal_access_token.rs
similarity index 75%
copy from core/common/src/http/users/mod.rs
copy to core/common/src/http/personal_access_tokens/login_with_personal_access_token.rs
index 7d70c2720..155023d4c 100644
--- a/core/common/src/http/users/mod.rs
+++ b/core/common/src/http/personal_access_tokens/login_with_personal_access_token.rs
@@ -16,9 +16,11 @@
* under the License.
*/
-pub mod change_password;
-pub mod create_user;
-pub mod defaults;
-pub mod delete_user;
-pub mod update_permissions;
-pub mod update_user;
+use secrecy::SecretString;
+use serde::{Deserialize, Serialize};
+
+#[derive(Debug, Serialize, Deserialize)]
+pub struct LoginWithPersonalAccessToken {
+ #[serde(serialize_with = "crate::utils::serde_secret::serialize_secret")]
+ pub token: SecretString,
+}
diff --git a/core/common/src/http/personal_access_tokens/mod.rs b/core/common/src/http/personal_access_tokens/mod.rs
index e9513d5a3..c70fca451 100644
--- a/core/common/src/http/personal_access_tokens/mod.rs
+++ b/core/common/src/http/personal_access_tokens/mod.rs
@@ -18,3 +18,4 @@
pub mod create_personal_access_token;
pub mod delete_personal_access_token;
+pub mod login_with_personal_access_token;
diff --git a/core/common/src/http/users/mod.rs b/core/common/src/http/system/get_snapshot.rs
similarity index 75%
copy from core/common/src/http/users/mod.rs
copy to core/common/src/http/system/get_snapshot.rs
index 7d70c2720..684c48e77 100644
--- a/core/common/src/http/users/mod.rs
+++ b/core/common/src/http/system/get_snapshot.rs
@@ -16,9 +16,12 @@
* under the License.
*/
-pub mod change_password;
-pub mod create_user;
-pub mod defaults;
-pub mod delete_user;
-pub mod update_permissions;
-pub mod update_user;
+use crate::SnapshotCompression;
+use crate::SystemSnapshotType;
+use serde::{Deserialize, Serialize};
+
+#[derive(Debug, Serialize, Deserialize)]
+pub struct GetSnapshot {
+ pub compression: SnapshotCompression,
+ pub snapshot_types: Vec<SystemSnapshotType>,
+}
diff --git a/core/common/src/http/system/mod.rs b/core/common/src/http/system/mod.rs
index 31bd66e6e..58dcaf4e1 100644
--- a/core/common/src/http/system/mod.rs
+++ b/core/common/src/http/system/mod.rs
@@ -15,3 +15,5 @@
* specific language governing permissions and limitations
* under the License.
*/
+
+pub mod get_snapshot;
diff --git a/core/common/src/http/users/mod.rs b/core/common/src/http/users/login_user.rs
similarity index 68%
copy from core/common/src/http/users/mod.rs
copy to core/common/src/http/users/login_user.rs
index 7d70c2720..ae0757407 100644
--- a/core/common/src/http/users/mod.rs
+++ b/core/common/src/http/users/login_user.rs
@@ -16,9 +16,16 @@
* under the License.
*/
-pub mod change_password;
-pub mod create_user;
-pub mod defaults;
-pub mod delete_user;
-pub mod update_permissions;
-pub mod update_user;
+use secrecy::SecretString;
+use serde::{Deserialize, Serialize};
+
+#[derive(Debug, Serialize, Deserialize)]
+pub struct LoginUser {
+ pub username: String,
+ #[serde(serialize_with = "crate::utils::serde_secret::serialize_secret")]
+ pub password: SecretString,
+ #[serde(default)]
+ pub version: Option<String>,
+ #[serde(default)]
+ pub context: Option<String>,
+}
diff --git a/core/common/src/http/users/mod.rs b/core/common/src/http/users/mod.rs
index 7d70c2720..52e4c7aaa 100644
--- a/core/common/src/http/users/mod.rs
+++ b/core/common/src/http/users/mod.rs
@@ -20,5 +20,6 @@ pub mod change_password;
pub mod create_user;
pub mod defaults;
pub mod delete_user;
+pub mod login_user;
pub mod update_permissions;
pub mod update_user;
diff --git a/core/common/src/lib.rs b/core/common/src/lib.rs
index 738efd0e1..f094461f3 100644
--- a/core/common/src/lib.rs
+++ b/core/common/src/lib.rs
@@ -40,11 +40,13 @@ pub use certificates::generate_self_signed_certificate;
pub use chrono::{DateTime, Duration as ChronoDuration, Utc};
pub use deduplication::MessageDeduplicator;
pub use http::consumer_groups::*;
+pub use http::consumer_offsets::*;
pub use http::messages::*;
pub use http::partitions::*;
pub use http::personal_access_tokens::*;
pub use http::segments::*;
pub use http::streams::*;
+pub use http::system::*;
pub use http::topics::*;
pub use http::users::*;
pub use sender::{
diff --git a/core/common/src/types/command/mod.rs b/core/common/src/types/command/mod.rs
deleted file mode 100644
index 31bd66e6e..000000000
--- a/core/common/src/types/command/mod.rs
+++ /dev/null
@@ -1,17 +0,0 @@
-/* Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
diff --git a/core/common/src/types/mod.rs b/core/common/src/types/mod.rs
index 01b19de7b..c07dda23c 100644
--- a/core/common/src/types/mod.rs
+++ b/core/common/src/types/mod.rs
@@ -19,7 +19,6 @@ pub(crate) mod args;
pub(crate) mod client;
pub(crate) mod client_state;
pub(crate) mod cluster;
-pub(crate) mod command;
pub(crate) mod compression;
pub(crate) mod configuration;
pub(crate) mod consumer;
diff --git a/core/sdk/src/http/consumer_offsets.rs b/core/sdk/src/http/consumer_offsets.rs
index 4c3a07012..fe7435506 100644
--- a/core/sdk/src/http/consumer_offsets.rs
+++ b/core/sdk/src/http/consumer_offsets.rs
@@ -22,24 +22,9 @@ use crate::prelude::Identifier;
use crate::prelude::IggyError;
use async_trait::async_trait;
use iggy_common::ConsumerOffsetClient;
+use iggy_common::get_consumer_offset::GetConsumerOffset;
+use iggy_common::store_consumer_offset::StoreConsumerOffset;
use iggy_common::{Consumer, ConsumerOffsetInfo};
-use serde::Serialize;
-
-#[derive(Serialize)]
-struct StoreOffsetRequest {
- #[serde(flatten)]
- consumer: Consumer,
- partition_id: Option<u32>,
- offset: u64,
-}
-
-#[derive(Serialize)]
-struct GetOffsetQuery {
- #[serde(flatten)]
- consumer: Consumer,
- #[serde(skip_serializing_if = "Option::is_none")]
- partition_id: Option<u32>,
-}
#[async_trait]
impl ConsumerOffsetClient for HttpClient {
@@ -53,7 +38,7 @@ impl ConsumerOffsetClient for HttpClient {
) -> Result<(), IggyError> {
self.put(
&get_path(&stream_id.as_cow_str(), &topic_id.as_cow_str()),
- &StoreOffsetRequest {
+ &StoreConsumerOffset {
consumer: consumer.clone(),
partition_id,
offset,
@@ -73,7 +58,7 @@ impl ConsumerOffsetClient for HttpClient {
let response = self
.get_with_query(
&get_path(&stream_id.as_cow_str(), &topic_id.as_cow_str()),
- &GetOffsetQuery {
+ &GetConsumerOffset {
consumer: consumer.clone(),
partition_id,
},
diff --git a/core/sdk/src/http/messages.rs b/core/sdk/src/http/messages.rs
index 581a04160..50153f004 100644
--- a/core/sdk/src/http/messages.rs
+++ b/core/sdk/src/http/messages.rs
@@ -25,13 +25,7 @@ use crate::prelude::{
use async_trait::async_trait;
use iggy_common::IggyMessagesBatch;
use iggy_common::MessageClient;
-use serde::Serialize;
-
-#[derive(Serialize)]
-struct FlushUnsavedBufferQuery {
- partition_id: u32,
- fsync: bool,
-}
+use iggy_common::flush_unsaved_buffer::FlushUnsavedBuffer;
#[async_trait]
impl MessageClient for HttpClient {
@@ -103,7 +97,7 @@ impl MessageClient for HttpClient {
partition_id,
fsync,
),
- &FlushUnsavedBufferQuery {
+ &FlushUnsavedBuffer {
partition_id,
fsync,
},
diff --git a/core/sdk/src/http/personal_access_tokens.rs b/core/sdk/src/http/personal_access_tokens.rs
index fd53224e7..902f0baf4 100644
--- a/core/sdk/src/http/personal_access_tokens.rs
+++ b/core/sdk/src/http/personal_access_tokens.rs
@@ -24,15 +24,9 @@ use iggy_common::IdentityInfo;
use iggy_common::PersonalAccessTokenClient;
use iggy_common::PersonalAccessTokenExpiry;
use iggy_common::create_personal_access_token::CreatePersonalAccessToken;
+use iggy_common::login_with_personal_access_token::LoginWithPersonalAccessToken;
use iggy_common::{PersonalAccessTokenInfo, RawPersonalAccessToken};
use secrecy::SecretString;
-use serde::Serialize;
-
-#[derive(Serialize)]
-struct LoginWithPatRequest {
- #[serde(serialize_with = "iggy_common::serde_secret::serialize_secret")]
- token: SecretString,
-}
const PATH: &str = "/personal-access-tokens";
@@ -80,7 +74,7 @@ impl PersonalAccessTokenClient for HttpClient {
let response = self
.post(
&format!("{PATH}/login"),
- &LoginWithPatRequest {
+ &LoginWithPersonalAccessToken {
token: SecretString::from(token),
},
)
diff --git a/core/sdk/src/http/system.rs b/core/sdk/src/http/system.rs
index 8f1724d70..295925c7a 100644
--- a/core/sdk/src/http/system.rs
+++ b/core/sdk/src/http/system.rs
@@ -23,15 +23,9 @@ use async_trait::async_trait;
use iggy_common::Snapshot;
use iggy_common::Stats;
use iggy_common::SystemClient;
+use iggy_common::get_snapshot::GetSnapshot;
use iggy_common::{ClientInfo, ClientInfoDetails};
use iggy_common::{SnapshotCompression, SystemSnapshotType};
-use serde::Serialize;
-
-#[derive(Serialize)]
-struct GetSnapshotRequest {
- compression: SnapshotCompression,
- snapshot_types: Vec<SystemSnapshotType>,
-}
const PING: &str = "/ping";
const CLIENTS: &str = "/clients";
@@ -96,7 +90,7 @@ impl SystemClient for HttpClient {
let response = self
.post(
SNAPSHOT,
- &GetSnapshotRequest {
+ &GetSnapshot {
compression,
snapshot_types,
},
diff --git a/core/sdk/src/http/users.rs b/core/sdk/src/http/users.rs
index 29f7215c1..08ad3b504 100644
--- a/core/sdk/src/http/users.rs
+++ b/core/sdk/src/http/users.rs
@@ -23,20 +23,11 @@ use async_trait::async_trait;
use iggy_common::UserClient;
use iggy_common::change_password::ChangePassword;
use iggy_common::create_user::CreateUser;
+use iggy_common::login_user::LoginUser;
use iggy_common::update_permissions::UpdatePermissions;
use iggy_common::update_user::UpdateUser;
use iggy_common::{IdentityInfo, Permissions, UserInfo, UserInfoDetails, UserStatus};
use secrecy::SecretString;
-use serde::Serialize;
-
-#[derive(Serialize)]
-struct LoginUserRequest {
- username: String,
- #[serde(serialize_with = "iggy_common::serde_secret::serialize_secret")]
- password: SecretString,
- version: Option<String>,
- context: Option<String>,
-}
const PATH: &str = "/users";
@@ -155,7 +146,7 @@ impl UserClient for HttpClient {
let response = self
.post(
&format!("{PATH}/login"),
- &LoginUserRequest {
+ &LoginUser {
username: username.to_string(),
password: SecretString::from(password),
version: Some(env!("CARGO_PKG_VERSION").to_string()),
diff --git a/core/server/src/http/consumer_offsets.rs b/core/server/src/http/consumer_offsets.rs
index 0101d979b..9564b6614 100644
--- a/core/server/src/http/consumer_offsets.rs
+++ b/core/server/src/http/consumer_offsets.rs
@@ -30,31 +30,11 @@ use iggy_common::Consumer;
use iggy_common::ConsumerOffsetInfo;
use iggy_common::Identifier;
use iggy_common::IggyError;
-use serde::Deserialize;
+use iggy_common::delete_consumer_offset::DeleteConsumerOffset;
+use iggy_common::get_consumer_offset::GetConsumerOffset;
+use iggy_common::store_consumer_offset::StoreConsumerOffset;
use std::sync::Arc;
-#[derive(Debug, Deserialize)]
-struct GetConsumerOffsetQuery {
- #[serde(flatten)]
- consumer: Consumer,
- #[serde(default)]
- partition_id: Option<u32>,
-}
-
-#[derive(Debug, Deserialize)]
-struct StoreConsumerOffsetBody {
- #[serde(flatten)]
- consumer: Consumer,
- partition_id: Option<u32>,
- offset: u64,
-}
-
-#[derive(Debug, Deserialize)]
-struct DeleteConsumerOffsetQuery {
- #[serde(default)]
- partition_id: Option<u32>,
-}
-
pub fn router(state: Arc<AppState>) -> Router {
Router::new()
.route(
@@ -73,7 +53,7 @@ async fn get_consumer_offset(
State(state): State<Arc<AppState>>,
Extension(identity): Extension<Identity>,
Path((stream_id, topic_id)): Path<(String, String)>,
- query: Query<GetConsumerOffsetQuery>,
+ query: Query<GetConsumerOffset>,
) -> Result<Json<ConsumerOffsetInfo>, CustomError> {
let stream_id = Identifier::from_str_value(&stream_id)?;
let topic_id = Identifier::from_str_value(&topic_id)?;
@@ -111,7 +91,7 @@ async fn store_consumer_offset(
State(state): State<Arc<AppState>>,
Extension(identity): Extension<Identity>,
Path((stream_id, topic_id)): Path<(String, String)>,
- Json(body): Json<StoreConsumerOffsetBody>,
+ Json(body): Json<StoreConsumerOffset>,
) -> Result<StatusCode, CustomError> {
let stream_id = Identifier::from_str_value(&stream_id)?;
let topic_id = Identifier::from_str_value(&topic_id)?;
@@ -142,7 +122,7 @@ async fn delete_consumer_offset(
State(state): State<Arc<AppState>>,
Extension(identity): Extension<Identity>,
Path((stream_id, topic_id, consumer_id)): Path<(String, String, String)>,
- query: Query<DeleteConsumerOffsetQuery>,
+ query: Query<DeleteConsumerOffset>,
) -> Result<StatusCode, CustomError> {
let stream_id_ident = Identifier::from_str_value(&stream_id)?;
let topic_id_ident = Identifier::from_str_value(&topic_id)?;
diff --git a/core/server/src/http/personal_access_tokens.rs b/core/server/src/http/personal_access_tokens.rs
index 927a761b6..dfd4870f0 100644
--- a/core/server/src/http/personal_access_tokens.rs
+++ b/core/server/src/http/personal_access_tokens.rs
@@ -38,17 +38,12 @@ use iggy_common::IdentityInfo;
use iggy_common::PersonalAccessTokenInfo;
use iggy_common::Validatable;
use iggy_common::create_personal_access_token::CreatePersonalAccessToken;
+use iggy_common::login_with_personal_access_token::LoginWithPersonalAccessToken;
use iggy_common::{IggyError, RawPersonalAccessToken};
-use secrecy::{ExposeSecret, SecretString};
-use serde::Deserialize;
+use secrecy::ExposeSecret;
use std::sync::Arc;
use tracing::instrument;
-#[derive(Debug, Deserialize)]
-struct LoginWithPatBody {
- pub token: SecretString,
-}
-
pub fn router(state: Arc<AppState>) -> Router {
Router::new()
.route(
@@ -140,7 +135,7 @@ async fn delete_personal_access_token(
#[instrument(skip_all, name = "trace_login_with_personal_access_token")]
async fn login_with_personal_access_token(
State(state): State<Arc<AppState>>,
- Json(command): Json<LoginWithPatBody>,
+ Json(command): Json<LoginWithPersonalAccessToken>,
) -> Result<Json<IdentityInfo>, CustomError> {
let user = state
.shard
diff --git a/core/server/src/http/system.rs b/core/server/src/http/system.rs
index e5021266a..e1a229f9a 100644
--- a/core/server/src/http/system.rs
+++ b/core/server/src/http/system.rs
@@ -32,21 +32,12 @@ use bytes::Bytes;
use chrono::Local;
use err_trail::ErrContext;
use iggy_common::Stats;
-use iggy_common::{
- ClientInfo, ClientInfoDetails, ClusterMetadata, IggyError, SnapshotCompression,
- SystemSnapshotType,
-};
+use iggy_common::get_snapshot::GetSnapshot;
+use iggy_common::{ClientInfo, ClientInfoDetails, ClusterMetadata, IggyError, SystemSnapshotType};
use send_wrapper::SendWrapper;
-use serde::Deserialize;
use std::sync::Arc;
use tracing::error;
-#[derive(Debug, Deserialize)]
-struct GetSnapshotBody {
- pub snapshot_types: Vec<SystemSnapshotType>,
- pub compression: SnapshotCompression,
-}
-
const NAME: &str = "Iggy API";
const PONG: &str = "pong";
@@ -138,7 +129,7 @@ async fn get_clients(
async fn get_snapshot(
State(state): State<Arc<AppState>>,
Extension(_identity): Extension<Identity>,
- Json(command): Json<GetSnapshotBody>,
+ Json(command): Json<GetSnapshot>,
) -> Result<impl IntoResponse, CustomError> {
if command.snapshot_types.contains(&SystemSnapshotType::All) && command.snapshot_types.len() > 1
{
diff --git a/core/server/src/http/users.rs b/core/server/src/http/users.rs
index cb6020674..4dcc7f73d 100644
--- a/core/server/src/http/users.rs
+++ b/core/server/src/http/users.rs
@@ -45,19 +45,14 @@ use iggy_binary_protocol::requests::users::{
use iggy_common::Identifier;
use iggy_common::IdentityInfo;
use iggy_common::Validatable;
+use iggy_common::login_user::LoginUser;
use iggy_common::{IggyError, UserInfo, UserInfoDetails};
-use secrecy::{ExposeSecret, SecretString};
+use secrecy::ExposeSecret;
use send_wrapper::SendWrapper;
use serde::Deserialize;
use std::sync::Arc;
use tracing::instrument;
-#[derive(Debug, Deserialize)]
-struct LoginUserBody {
- pub username: String,
- pub password: SecretString,
-}
-
pub fn router(state: Arc<AppState>) -> Router {
Router::new()
.route("/users", get(get_users).post(create_user))
@@ -262,7 +257,7 @@ async fn delete_user(
#[instrument(skip_all, name = "trace_login_user")]
async fn login_user(
State(state): State<Arc<AppState>>,
- Json(command): Json<LoginUserBody>,
+ Json(command): Json<LoginUser>,
) -> Result<Json<IdentityInfo>, CustomError> {
let user = state
.shard