From 38c21b0b7e484559ebf265e8d1f7cda3286523f9 Mon Sep 17 00:00:00 2001 From: Vincent Stuyck Date: Sat, 20 Dec 2025 04:55:49 +0100 Subject: [PATCH] add move api call --- src/api/folders.rs | 31 ++++++++++++++++++++++++++++++- src/client.rs | 10 +++++----- 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/src/api/folders.rs b/src/api/folders.rs index 75caaa1..b3aec9a 100644 --- a/src/api/folders.rs +++ b/src/api/folders.rs @@ -4,7 +4,7 @@ use std::fmt::Display; use chrono::{DateTime, Utc}; use serde::{Deserialize, Serialize}; -use crate::Client; +use crate::{Client, Result}; use crate::api::{BulkReadDomainExtention, BulkUpdateDomainExtention, DomainExtention}; use crate::api::rules::contactgroups::HostContactGroups; use crate::api::rules::snmp::SnmpCommunity; @@ -250,3 +250,32 @@ impl FolderBulkUpdateRequest { Self { folder, update_request } } } + +#[derive(Serialize)] +pub struct MoveFolderRequest { + destination: String +} + +impl MoveFolderRequest { + pub fn new(destination: String) -> Self { + Self { destination } + } +} + +impl ApiClient { + pub async fn move_folder(&self, id: impl Display, request: &MoveFolderRequest) -> Result<()> { + let url = format!( + "{}/actions/move/invoke", + self.inner.object_url(FolderConfig::DOMAIN_TYPE, id) + ); + let request = self.inner.http + .post(url) + .json(request) + .build() + .unwrap(); + + self.inner.invoke_api(request).await + } +} + +// TODO: add show hosts api call diff --git a/src/client.rs b/src/client.rs index ec4411f..85ed53e 100644 --- a/src/client.rs +++ b/src/client.rs @@ -17,10 +17,10 @@ use crate::api::{ use crate::{Error, Result}; #[derive(Clone)] -pub struct Client(Arc); -struct InnerClient { - http: reqwest::Client, - url: String, +pub struct Client(pub(crate) Arc); +pub(crate) struct InnerClient { + pub(crate) http: reqwest::Client, + pub(crate) url: String, semaphore: Semaphore, } @@ -424,7 +424,7 @@ impl Display for BulkAction { } pub struct ApiClient { - inner: Arc, + pub(crate) inner: Arc, _marker: PhantomData, }