z_osmf 0.13.5

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

use z_osmf_macros::Endpoint;

use crate::convert::TryFromResponse;
use crate::ClientCore;

use super::{get_subsystem, JobIdentifier};

#[derive(Clone, Debug, Endpoint)]
#[endpoint(method = delete, path = "/zosmf/restjobs/jobs{subsystem}/{identifier}")]
pub struct JobPurgeBuilder<T>
where
    T: TryFromResponse,
{
    core: Arc<ClientCore>,

    #[endpoint(path, builder_fn = build_subsystem)]
    subsystem: Option<Arc<str>>,
    #[endpoint(path)]
    identifier: JobIdentifier,
    #[endpoint(skip_setter, builder_fn = build_asynchronous)]
    asynchronous: Option<bool>,

    target_type: PhantomData<T>,
}

impl<T> JobPurgeBuilder<T>
where
    T: TryFromResponse,
{
    pub fn asynchronous(self) -> JobPurgeBuilder<()> {
        JobPurgeBuilder {
            core: self.core,
            subsystem: self.subsystem,
            identifier: self.identifier,
            asynchronous: Some(true),
            target_type: PhantomData,
        }
    }
}

fn build_asynchronous<T>(
    request_builder: reqwest::RequestBuilder,
    builder: &JobPurgeBuilder<T>,
) -> reqwest::RequestBuilder
where
    T: TryFromResponse,
{
    request_builder.header(
        "X-IBM-Job-Modify-Version",
        if builder.asynchronous == Some(true) {
            "1.0"
        } else {
            "2.0"
        },
    )
}

fn build_subsystem<T>(builder: &JobPurgeBuilder<T>) -> String
where
    T: TryFromResponse,
{
    get_subsystem(&builder.subsystem)
}

#[cfg(test)]
mod tests {
    use crate::tests::*;

    use super::*;

    #[test]
    fn example_1() {
        let zosmf = get_zosmf();

        let manual_request = zosmf
            .core
            .client
            .delete("https://test.com/zosmf/restjobs/jobs/TESTJOBW/JOB00085")
            .header("X-IBM-Job-Modify-Version", "2.0")
            .build()
            .unwrap();

        let identifier = JobIdentifier::NameId("TESTJOBW".to_string(), "JOB00085".to_string());
        let job_feedback = zosmf
            .jobs()
            .cancel_and_purge(identifier)
            .get_request()
            .unwrap();

        assert_eq!(
            format!("{:?}", manual_request),
            format!("{:?}", job_feedback)
        )
    }
}