wp_goji_patch/
transitions.rs

1//! Interfaces for accessing and managing transition
2
3// Ours
4use crate::{Error, Jira, Result, TransitionOption, TransitionOptions, TransitionTriggerOptions};
5
6/// issue transition interface
7#[derive(Debug)]
8pub struct Transitions {
9    jira: Jira,
10    key: String,
11}
12
13impl Transitions {
14    pub fn new<K>(jira: &Jira, key: K) -> Transitions
15    where
16        K: Into<String>,
17    {
18        Transitions {
19            jira: jira.clone(),
20            key: key.into(),
21        }
22    }
23
24    /// return list of transitions options for this issue
25    pub fn list(&self) -> Result<Vec<TransitionOption>> {
26        self.jira
27            .get::<TransitionOptions>(
28                "api",
29                &format!("/issue/{}/transitions?expand=transitions.fields", self.key),
30            )
31            .map(|wrapper| wrapper.transitions)
32    }
33
34    /// trigger a issue transition
35    /// to transition with a resolution use TransitionTrigger::builder(id).resolution(name)
36    pub fn trigger(&self, trans: TransitionTriggerOptions) -> Result<()> {
37        self.jira
38            .post::<(), TransitionTriggerOptions>(
39                "api",
40                &format!("/issue/{}/transitions", self.key),
41                trans,
42            )
43            .or_else(|e| match e {
44                Error::Serde(_) => Ok(()),
45                e => Err(e),
46            })
47    }
48}