use serde::Serialize;
use crate::{
client::{internal_client::HttpRequestType, BoreholeIoClient, Result},
schema::{
Borehole, DateTime, Device, JsonValue, Location, LoggingEquipment, LoggingRun, Project,
Tag, Uuid,
},
};
pub async fn list(client: &BoreholeIoClient) -> Result<Vec<LoggingRun>> {
client
.web_client
.send_request_with_data::<(), Vec<LoggingRun>>(
(format!("{}/logging-runs/", client.base_url())).as_str(),
HttpRequestType::Get,
(),
)
.await
}
#[derive(Default, Serialize)]
pub struct UpdateTagsParameters {
add: Vec<Tag>,
remove: Vec<Tag>,
}
#[serde_with::skip_serializing_none]
#[derive(Default, serde::Serialize)]
pub struct BulkUpdateParameters {
pub ids: Option<Vec<Uuid>>,
pub borehole: Option<Borehole>,
pub project: Option<Project>,
pub location: Option<Location>,
pub tags: Option<UpdateTagsParameters>,
}
pub async fn bulk_update(
client: &BoreholeIoClient,
parameters: BulkUpdateParameters,
) -> Result<()> {
client
.web_client
.send_request_no_data::<BulkUpdateParameters>(
(format!("{}/logging-runs/", client.base_url())).as_str(),
HttpRequestType::Post,
parameters,
)
.await
}
#[serde_with::skip_serializing_none]
#[derive(Default, serde::Serialize)]
pub struct CreateParameters {
pub id: Option<Uuid>,
pub borehole: Option<Borehole>,
pub project: Option<Project>,
pub tags: Option<Vec<Tag>>,
pub metadata: Option<JsonValue>,
pub notes: Option<String>,
pub device: Option<Device>,
pub location: Option<Location>,
pub starting_depth: Option<f64>,
pub started_at: Option<DateTime>,
pub logging_equipment: Option<LoggingEquipment>,
}
pub async fn create(client: &BoreholeIoClient, parameters: CreateParameters) -> Result<LoggingRun> {
client
.web_client
.send_request_with_data::<_, LoggingRun>(
(format!("{}/logging-runs/", client.base_url())).as_str(),
HttpRequestType::Post,
parameters,
)
.await
}
pub async fn find(client: &BoreholeIoClient, id: Uuid) -> Result<LoggingRun> {
client
.web_client
.send_request_with_data::<_, LoggingRun>(
(format!("{}/logging-runs/{}", client.base_url(), id)).as_str(),
HttpRequestType::Get,
(),
)
.await
}
#[serde_with::skip_serializing_none]
#[derive(Default, serde::Serialize)]
pub struct UpdateParameters {
pub borehole: Option<Borehole>,
pub project: Option<Project>,
pub location: Option<Location>,
pub tags: Option<UpdateTagsParameters>,
}
pub async fn update(
client: &BoreholeIoClient,
id: Uuid,
parameters: UpdateParameters,
) -> Result<LoggingRun> {
client
.web_client
.send_request_with_data::<_, LoggingRun>(
(format!("{}/logging-runs/{}", client.base_url(), id)).as_str(),
HttpRequestType::Patch,
parameters,
)
.await
}