z_osmf/workflows/
archived_workflows.rs

1use std::marker::PhantomData;
2use std::sync::Arc;
3
4use serde::{Deserialize, Serialize};
5use z_osmf_macros::{Endpoint, Getters};
6
7use crate::convert::TryFromResponse;
8use crate::ClientCore;
9
10#[derive(Clone, Debug, Deserialize, Eq, Getters, Hash, Ord, PartialEq, PartialOrd, Serialize)]
11pub struct ArchivedWorkflow {
12    name: Arc<str>,
13    key: Arc<str>,
14    uri: Arc<str>,
15}
16
17#[derive(Clone, Debug, Deserialize, Eq, Getters, Hash, Ord, PartialEq, PartialOrd, Serialize)]
18pub struct ArchivedWorkflowList {
19    items: Arc<[ArchivedWorkflow]>,
20}
21
22impl TryFromResponse for ArchivedWorkflowList {
23    async fn try_from_response(value: reqwest::Response) -> crate::Result<Self> {
24        let json: ResponseJson = value.json().await?;
25        let items = json
26            .archived_workflows
27            .into_iter()
28            .map(|workflow| ArchivedWorkflow {
29                name: workflow.workflow_name,
30                key: workflow.workflow_key,
31                uri: workflow.archived_instance_u_r_i,
32            })
33            .collect();
34
35        Ok(ArchivedWorkflowList { items })
36    }
37}
38
39#[derive(Clone, Debug, Endpoint)]
40#[endpoint(method = get, path = "/zosmf/workflow/rest/1.0/archivedworkflows")]
41pub struct ArchivedWorkflowListBuilder<T>
42where
43    T: TryFromResponse,
44{
45    core: Arc<ClientCore>,
46
47    #[endpoint(query = "Orderby")]
48    order_by: Option<WorkflowOrderBy>,
49    #[endpoint(query = "View")]
50    view: Option<WorkflowView>,
51
52    target_type: PhantomData<T>,
53}
54
55#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)]
56pub enum WorkflowOrderBy {
57    Asc,
58    Desc,
59}
60
61#[derive(
62    Clone, Copy, Debug, Default, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize,
63)]
64pub enum WorkflowView {
65    Domain,
66    #[default]
67    User,
68}
69
70#[derive(Debug, Deserialize)]
71#[serde(rename_all = "camelCase")]
72struct ResponseJson {
73    archived_workflows: Vec<ResponseArchivedWorkflow>,
74}
75
76#[derive(Debug, Deserialize)]
77#[serde(rename_all = "camelCase")]
78struct ResponseArchivedWorkflow {
79    workflow_name: Arc<str>,
80    workflow_key: Arc<str>,
81    archived_instance_u_r_i: Arc<str>,
82}