boreholeio 0.1.0

A library for interacting with borehole.io, a subsurface data management, delivery and visualisation platform
Documentation
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
}