z_osmf 0.13.5

The Rust z/OSMF Client
Documentation
use std::marker::PhantomData;
use std::sync::Arc;

use serde::{Deserialize, Serialize};
use z_osmf_macros::{Endpoint, Getters};

use crate::convert::TryFromResponse;
use crate::{ClientCore, Result};

use super::{WorkflowAccess, WorkflowStatus};

#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)]
#[serde(rename_all = "lowercase")]
pub enum WorkflowCategory {
    Configuration,
    General,
}

#[derive(Clone, Debug, Deserialize, Eq, Getters, Hash, Ord, PartialEq, PartialOrd, Serialize)]
pub struct WorkflowInfo {
    #[serde(rename = "workflowName")]
    name: Arc<str>,
    #[serde(rename = "workflowKey")]
    key: Arc<str>,
    #[serde(rename = "workflowDescription")]
    description: Arc<str>,
    #[serde(rename = "workflowID")]
    id: Arc<str>,
    #[serde(rename = "workflowVersion")]
    version: Arc<str>,
    #[serde(rename = "workflowDefinitionFileMD5Value")]
    definition_file_hash: Arc<str>,
    #[serde(rename = "instanceURI")]
    instance_uri: Arc<str>,
    owner: Arc<str>,
    vendor: Arc<str>,
    #[getter(copy)]
    access: WorkflowAccess,
}

#[derive(Clone, Debug, Deserialize, Eq, Getters, Hash, Ord, PartialEq, PartialOrd, Serialize)]
pub struct WorkflowList {
    items: Arc<[WorkflowInfo]>,
}

impl TryFromResponse for WorkflowList {
    async fn try_from_response(value: reqwest::Response) -> Result<Self> {
        let items = value.json::<ResponseJson>().await?.workflows;

        Ok(WorkflowList { items })
    }
}

#[derive(Clone, Debug, Endpoint)]
#[endpoint(method = get, path = "/zosmf/workflow/rest/1.0/workflows")]
pub struct WorkflowListBuilder<T>
where
    T: TryFromResponse,
{
    core: Arc<ClientCore>,

    #[endpoint(query = "workflowName")]
    name: Option<Arc<str>>,
    #[endpoint(query = "category")]
    category: Option<WorkflowCategory>,
    #[endpoint(query = "system")]
    system: Option<Arc<str>>,
    #[endpoint(query = "statusName")]
    status: Option<WorkflowStatus>,
    #[endpoint(query = "owner")]
    owner: Option<Arc<str>>,
    #[endpoint(query = "vendor")]
    vendor: Option<Arc<str>>,

    target_type: PhantomData<T>,
}

#[derive(Deserialize)]
struct ResponseJson {
    workflows: Arc<[WorkflowInfo]>,
}