/*
* The Jira Cloud platform REST API
*
* Jira Cloud platform REST API documentation
*
* The version of the OpenAPI document: 1001.0.0-SNAPSHOT
* Contact: ecosystem@atlassian.com
* Generated by: https://openapi-generator.tech
*/
use super::{configuration, Error};
use crate::gen::apis::ResponseContent;
use crate::gen::models;
/// struct for passing parameters to the method `get_issue_picker_resource`
#[derive(Clone, Debug)]
pub struct GetIssuePickerResourceParams {
/// A string to match against text fields in the issue such as title, description, or comments.
pub query: Option<String>,
/// A JQL query defining a list of issues to search for the query term. Note that `username` and `userkey` cannot be used as search terms for this parameter, due to privacy reasons. Use `accountId` instead.
pub current_jql: Option<String>,
/// The key of an issue to exclude from search results. For example, the issue the user is viewing when they perform this query.
pub current_issue_key: Option<String>,
/// The ID of a project that suggested issues must belong to.
pub current_project_id: Option<String>,
/// Indicate whether to include subtasks in the suggestions list.
pub show_sub_tasks: Option<bool>,
/// When `currentIssueKey` is a subtask, whether to include the parent issue in the suggestions if it matches the query.
pub show_sub_task_parent: Option<bool>,
}
/// struct for passing parameters to the method `match_issues`
#[derive(Clone, Debug)]
pub struct MatchIssuesParams {
pub issues_and_jql_queries: models::IssuesAndJqlQueries,
}
/// struct for passing parameters to the method `search_for_issues_using_jql`
#[derive(Clone, Debug)]
pub struct SearchForIssuesUsingJqlParams {
/// The [JQL](https://confluence.atlassian.com/x/egORLQ) that defines the search. Note: * If no JQL expression is provided, all issues are returned. * `username` and `userkey` cannot be used as search terms due to privacy reasons. Use `accountId` instead. * If a user has hidden their email address in their user profile, partial matches of the email address will not find the user. An exact match is required.
pub jql: Option<String>,
/// The index of the first item to return in a page of results (page offset).
pub start_at: Option<i32>,
/// The maximum number of items to return per page. To manage page size, Jira may return fewer items per page where a large number of fields are requested. The greatest number of items returned per page is achieved when requesting `id` or `key` only.
pub max_results: Option<i32>,
/// Determines how to validate the JQL query and treat the validation results. Supported values are: * `strict` Returns a 400 response code if any errors are found, along with a list of all errors (and warnings). * `warn` Returns all errors as warnings. * `none` No validation is performed. * `true` *Deprecated* A legacy synonym for `strict`. * `false` *Deprecated* A legacy synonym for `warn`. Note: If the JQL is not correctly formed a 400 response code is returned, regardless of the `validateQuery` value.
pub validate_query: Option<String>,
/// A list of fields to return for each issue, use it to retrieve a subset of fields. This parameter accepts a comma-separated list. Expand options include: * `*all` Returns all fields. * `*navigable` Returns navigable fields. * Any issue field, prefixed with a minus to exclude. Examples: * `summary,comment` Returns only the summary and comments fields. * `-description` Returns all navigable (default) fields except description. * `*all,-comment` Returns all fields except comments. This parameter may be specified multiple times. For example, `fields=field1,field2&fields=field3`. Note: All navigable fields are returned by default. This differs from [GET issue](#api-rest-api-3-issue-issueIdOrKey-get) where the default is all fields.
pub fields: Option<Vec<String>>,
/// Use [expand](#expansion) to include additional information about issues in the response. This parameter accepts a comma-separated list. Expand options include: * `renderedFields` Returns field values rendered in HTML format. * `names` Returns the display name of each field. * `schema` Returns the schema describing a field type. * `transitions` Returns all possible transitions for the issue. * `operations` Returns all possible operations for the issue. * `editmeta` Returns information about how each field can be edited. * `changelog` Returns a list of recent updates to an issue, sorted by date, starting from the most recent. * `versionedRepresentations` Instead of `fields`, returns `versionedRepresentations` a JSON array containing each version of a field's value, with the highest numbered item representing the most recent version.
pub expand: Option<String>,
/// A list of issue property keys for issue properties to include in the results. This parameter accepts a comma-separated list. Multiple properties can also be provided using an ampersand separated list. For example, `properties=prop1,prop2&properties=prop3`. A maximum of 5 issue property keys can be specified.
pub properties: Option<Vec<String>>,
/// Reference fields by their key (rather than ID).
pub fields_by_keys: Option<bool>,
}
/// struct for passing parameters to the method `search_for_issues_using_jql_post`
#[derive(Clone, Debug)]
pub struct SearchForIssuesUsingJqlPostParams {
/// A JSON object containing the search request.
pub search_request_bean: models::SearchRequestBean,
}
/// struct for typed errors of method `get_issue_picker_resource`
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum GetIssuePickerResourceError {
Status401(),
UnknownValue(serde_json::Value),
}
/// struct for typed errors of method `match_issues`
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum MatchIssuesError {
Status400(),
UnknownValue(serde_json::Value),
}
/// struct for typed errors of method `search_for_issues_using_jql`
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum SearchForIssuesUsingJqlError {
Status400(),
Status401(),
UnknownValue(serde_json::Value),
}
/// struct for typed errors of method `search_for_issues_using_jql_post`
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum SearchForIssuesUsingJqlPostError {
Status400(),
Status401(),
UnknownValue(serde_json::Value),
}
/// Returns lists of issues matching a query string. Use this resource to provide auto-completion suggestions when the user is looking for an issue using a word or string. This operation returns two lists: * `History Search` which includes issues from the user's history of created, edited, or viewed issues that contain the string in the `query` parameter. * `Current Search` which includes issues that match the JQL expression in `currentJQL` and contain the string in the `query` parameter. This operation can be accessed anonymously. **[Permissions](#permissions) required:** None.
pub async fn get_issue_picker_resource(
configuration: &configuration::Configuration,
params: GetIssuePickerResourceParams,
) -> Result<models::IssuePickerSuggestions, Error<GetIssuePickerResourceError>> {
// unbox the parameters
let query = params.query;
let current_jql = params.current_jql;
let current_issue_key = params.current_issue_key;
let current_project_id = params.current_project_id;
let show_sub_tasks = params.show_sub_tasks;
let show_sub_task_parent = params.show_sub_task_parent;
let local_var_client = &configuration.client;
let local_var_uri_str = format!("{}/rest/api/3/issue/picker", configuration.base_path);
let mut local_var_req_builder = local_var_client.get(local_var_uri_str.as_str());
if let Some(ref local_var_str) = query {
local_var_req_builder =
local_var_req_builder.query(&[("query", &local_var_str.to_string())]);
}
if let Some(ref local_var_str) = current_jql {
local_var_req_builder =
local_var_req_builder.query(&[("currentJQL", &local_var_str.to_string())]);
}
if let Some(ref local_var_str) = current_issue_key {
local_var_req_builder =
local_var_req_builder.query(&[("currentIssueKey", &local_var_str.to_string())]);
}
if let Some(ref local_var_str) = current_project_id {
local_var_req_builder =
local_var_req_builder.query(&[("currentProjectId", &local_var_str.to_string())]);
}
if let Some(ref local_var_str) = show_sub_tasks {
local_var_req_builder =
local_var_req_builder.query(&[("showSubTasks", &local_var_str.to_string())]);
}
if let Some(ref local_var_str) = show_sub_task_parent {
local_var_req_builder =
local_var_req_builder.query(&[("showSubTaskParent", &local_var_str.to_string())]);
}
if let Some(ref local_var_user_agent) = configuration.user_agent {
local_var_req_builder =
local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
}
if let Some(ref local_var_token) = configuration.oauth_access_token {
local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned());
};
if let Some(ref local_var_auth_conf) = configuration.basic_auth {
local_var_req_builder = local_var_req_builder.basic_auth(
local_var_auth_conf.0.to_owned(),
local_var_auth_conf.1.to_owned(),
);
};
let local_var_req = local_var_req_builder.build()?;
let local_var_resp = local_var_client.execute(local_var_req).await?;
let local_var_status = local_var_resp.status();
let local_var_content = local_var_resp.text().await?;
if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
serde_json::from_str(&local_var_content).map_err(Error::from)
} else {
let local_var_entity: Option<GetIssuePickerResourceError> =
serde_json::from_str(&local_var_content).ok();
let local_var_error = ResponseContent {
status: local_var_status,
content: local_var_content,
entity: local_var_entity,
};
Err(Error::ResponseError(local_var_error))
}
}
/// Checks whether one or more issues would be returned by one or more JQL queries. **[Permissions](#permissions) required:** None, however, issues are only matched against JQL queries where the user has: * *Browse projects* [project permission](https://confluence.atlassian.com/x/yodKLg) for the project that the issue is in. * If [issue-level security](https://confluence.atlassian.com/x/J4lKLg) is configured, issue-level security permission to view the issue.
pub async fn match_issues(
configuration: &configuration::Configuration,
params: MatchIssuesParams,
) -> Result<models::IssueMatches, Error<MatchIssuesError>> {
// unbox the parameters
let issues_and_jql_queries = params.issues_and_jql_queries;
let local_var_client = &configuration.client;
let local_var_uri_str = format!("{}/rest/api/3/jql/match", configuration.base_path);
let mut local_var_req_builder = local_var_client.post(local_var_uri_str.as_str());
if let Some(ref local_var_user_agent) = configuration.user_agent {
local_var_req_builder =
local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
}
if let Some(ref local_var_token) = configuration.oauth_access_token {
local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned());
};
if let Some(ref local_var_auth_conf) = configuration.basic_auth {
local_var_req_builder = local_var_req_builder.basic_auth(
local_var_auth_conf.0.to_owned(),
local_var_auth_conf.1.to_owned(),
);
};
local_var_req_builder = local_var_req_builder.json(&issues_and_jql_queries);
let local_var_req = local_var_req_builder.build()?;
let local_var_resp = local_var_client.execute(local_var_req).await?;
let local_var_status = local_var_resp.status();
let local_var_content = local_var_resp.text().await?;
if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
serde_json::from_str(&local_var_content).map_err(Error::from)
} else {
let local_var_entity: Option<MatchIssuesError> =
serde_json::from_str(&local_var_content).ok();
let local_var_error = ResponseContent {
status: local_var_status,
content: local_var_content,
entity: local_var_entity,
};
Err(Error::ResponseError(local_var_error))
}
}
/// Searches for issues using [JQL](https://confluence.atlassian.com/x/egORLQ). If the JQL query expression is too large to be encoded as a query parameter, use the [POST](#api-rest-api-3-search-post) version of this resource. This operation can be accessed anonymously. **[Permissions](#permissions) required:** Issues are included in the response where the user has: * *Browse projects* [project permission](https://confluence.atlassian.com/x/yodKLg) for the project containing the issue. * If [issue-level security](https://confluence.atlassian.com/x/J4lKLg) is configured, issue-level security permission to view the issue.
pub async fn search_for_issues_using_jql(
configuration: &configuration::Configuration,
params: SearchForIssuesUsingJqlParams,
) -> Result<models::SearchResults, Error<SearchForIssuesUsingJqlError>> {
// unbox the parameters
let jql = params.jql;
let start_at = params.start_at;
let max_results = params.max_results;
let validate_query = params.validate_query;
let fields = params.fields;
let expand = params.expand;
let properties = params.properties;
let fields_by_keys = params.fields_by_keys;
let local_var_client = &configuration.client;
let local_var_uri_str = format!("{}/rest/api/3/search", configuration.base_path);
let mut local_var_req_builder = local_var_client.get(local_var_uri_str.as_str());
if let Some(ref local_var_str) = jql {
local_var_req_builder = local_var_req_builder.query(&[("jql", &local_var_str.to_string())]);
}
if let Some(ref local_var_str) = start_at {
local_var_req_builder =
local_var_req_builder.query(&[("startAt", &local_var_str.to_string())]);
}
if let Some(ref local_var_str) = max_results {
local_var_req_builder =
local_var_req_builder.query(&[("maxResults", &local_var_str.to_string())]);
}
if let Some(ref local_var_str) = validate_query {
local_var_req_builder =
local_var_req_builder.query(&[("validateQuery", &local_var_str.to_string())]);
}
if let Some(ref local_var_str) = fields {
local_var_req_builder = local_var_req_builder.query(&[(
"fields",
&local_var_str
.into_iter()
.map(|p| p.to_string())
.collect::<Vec<String>>()
.join(",")
.to_string(),
)]);
}
if let Some(ref local_var_str) = expand {
local_var_req_builder =
local_var_req_builder.query(&[("expand", &local_var_str.to_string())]);
}
if let Some(ref local_var_str) = properties {
local_var_req_builder = local_var_req_builder.query(&[(
"properties",
&local_var_str
.into_iter()
.map(|p| p.to_string())
.collect::<Vec<String>>()
.join(",")
.to_string(),
)]);
}
if let Some(ref local_var_str) = fields_by_keys {
local_var_req_builder =
local_var_req_builder.query(&[("fieldsByKeys", &local_var_str.to_string())]);
}
if let Some(ref local_var_user_agent) = configuration.user_agent {
local_var_req_builder =
local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
}
if let Some(ref local_var_token) = configuration.oauth_access_token {
local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned());
};
if let Some(ref local_var_auth_conf) = configuration.basic_auth {
local_var_req_builder = local_var_req_builder.basic_auth(
local_var_auth_conf.0.to_owned(),
local_var_auth_conf.1.to_owned(),
);
};
let local_var_req = local_var_req_builder.build()?;
let local_var_resp = local_var_client.execute(local_var_req).await?;
let local_var_status = local_var_resp.status();
let local_var_content = local_var_resp.text().await?;
if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
serde_json::from_str(&local_var_content).map_err(Error::from)
} else {
let local_var_entity: Option<SearchForIssuesUsingJqlError> =
serde_json::from_str(&local_var_content).ok();
let local_var_error = ResponseContent {
status: local_var_status,
content: local_var_content,
entity: local_var_entity,
};
Err(Error::ResponseError(local_var_error))
}
}
/// Searches for issues using [JQL](https://confluence.atlassian.com/x/egORLQ). There is a [GET](#api-rest-api-3-search-get) version of this resource that can be used for smaller JQL query expressions. This operation can be accessed anonymously. **[Permissions](#permissions) required:** Issues are included in the response where the user has: * *Browse projects* [project permission](https://confluence.atlassian.com/x/yodKLg) for the project containing the issue. * If [issue-level security](https://confluence.atlassian.com/x/J4lKLg) is configured, issue-level security permission to view the issue.
pub async fn search_for_issues_using_jql_post(
configuration: &configuration::Configuration,
params: SearchForIssuesUsingJqlPostParams,
) -> Result<models::SearchResults, Error<SearchForIssuesUsingJqlPostError>> {
// unbox the parameters
let search_request_bean = params.search_request_bean;
let local_var_client = &configuration.client;
let local_var_uri_str = format!("{}/rest/api/3/search", configuration.base_path);
let mut local_var_req_builder = local_var_client.post(local_var_uri_str.as_str());
if let Some(ref local_var_user_agent) = configuration.user_agent {
local_var_req_builder =
local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
}
if let Some(ref local_var_token) = configuration.oauth_access_token {
local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned());
};
if let Some(ref local_var_auth_conf) = configuration.basic_auth {
local_var_req_builder = local_var_req_builder.basic_auth(
local_var_auth_conf.0.to_owned(),
local_var_auth_conf.1.to_owned(),
);
};
local_var_req_builder = local_var_req_builder.json(&search_request_bean);
let local_var_req = local_var_req_builder.build()?;
let local_var_resp = local_var_client.execute(local_var_req).await?;
let local_var_status = local_var_resp.status();
let local_var_content = local_var_resp.text().await?;
if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
serde_json::from_str(&local_var_content).map_err(Error::from)
} else {
let local_var_entity: Option<SearchForIssuesUsingJqlPostError> =
serde_json::from_str(&local_var_content).ok();
let local_var_error = ResponseContent {
status: local_var_status,
content: local_var_content,
entity: local_var_entity,
};
Err(Error::ResponseError(local_var_error))
}
}