use derive_builder::Builder;
use reqwest::Method;
use std::borrow::Cow;
use crate::api::{Endpoint, ReturnsJsonResponse};
#[derive(Debug, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub struct IssuePriorityEssentials {
pub id: u64,
pub name: String,
}
impl From<IssuePriority> for IssuePriorityEssentials {
fn from(v: IssuePriority) -> Self {
IssuePriorityEssentials {
id: v.id,
name: v.name,
}
}
}
impl From<&IssuePriority> for IssuePriorityEssentials {
fn from(v: &IssuePriority) -> Self {
IssuePriorityEssentials {
id: v.id,
name: v.name.to_owned(),
}
}
}
#[derive(Debug, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub struct IssuePriority {
pub id: u64,
pub name: String,
pub is_default: bool,
}
#[derive(Debug, Builder)]
#[builder(setter(strip_option))]
pub struct ListIssuePriorities {}
impl ReturnsJsonResponse for ListIssuePriorities {}
impl ListIssuePriorities {
#[must_use]
pub fn builder() -> ListIssuePrioritiesBuilder {
ListIssuePrioritiesBuilder::default()
}
}
impl Endpoint for ListIssuePriorities {
fn method(&self) -> Method {
Method::GET
}
fn endpoint(&self) -> Cow<'static, str> {
"enumerations/issue_priorities.json".into()
}
}
#[derive(Debug, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub struct IssuePrioritiesWrapper<T> {
pub issue_priorities: Vec<T>,
}
#[derive(Debug, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub struct TimeEntryActivityEssentials {
pub id: u64,
pub name: String,
}
impl From<TimeEntryActivity> for TimeEntryActivityEssentials {
fn from(v: TimeEntryActivity) -> Self {
TimeEntryActivityEssentials {
id: v.id,
name: v.name,
}
}
}
impl From<&TimeEntryActivity> for TimeEntryActivityEssentials {
fn from(v: &TimeEntryActivity) -> Self {
TimeEntryActivityEssentials {
id: v.id,
name: v.name.to_owned(),
}
}
}
#[derive(Debug, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub struct TimeEntryActivity {
pub id: u64,
pub name: String,
pub is_default: bool,
}
#[derive(Debug, Builder)]
#[builder(setter(strip_option))]
pub struct ListTimeEntryActivities {}
impl ReturnsJsonResponse for ListTimeEntryActivities {}
impl ListTimeEntryActivities {
#[must_use]
pub fn builder() -> ListTimeEntryActivitiesBuilder {
ListTimeEntryActivitiesBuilder::default()
}
}
impl Endpoint for ListTimeEntryActivities {
fn method(&self) -> Method {
Method::GET
}
fn endpoint(&self) -> Cow<'static, str> {
"enumerations/time_entry_activities.json".into()
}
}
#[derive(Debug, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub struct TimeEntryActivitiesWrapper<T> {
pub time_entry_activities: Vec<T>,
}
#[derive(Debug, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub struct DocumentCategoryEssentials {
pub id: u64,
pub name: String,
}
impl From<DocumentCategory> for DocumentCategoryEssentials {
fn from(v: DocumentCategory) -> Self {
DocumentCategoryEssentials {
id: v.id,
name: v.name,
}
}
}
impl From<&DocumentCategory> for DocumentCategoryEssentials {
fn from(v: &DocumentCategory) -> Self {
DocumentCategoryEssentials {
id: v.id,
name: v.name.to_owned(),
}
}
}
#[derive(Debug, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub struct DocumentCategory {
pub id: u64,
pub name: String,
pub is_default: bool,
}
#[derive(Debug, Builder)]
#[builder(setter(strip_option))]
pub struct ListDocumentCategories {}
impl ReturnsJsonResponse for ListDocumentCategories {}
impl ListDocumentCategories {
#[must_use]
pub fn builder() -> ListDocumentCategoriesBuilder {
ListDocumentCategoriesBuilder::default()
}
}
impl Endpoint for ListDocumentCategories {
fn method(&self) -> Method {
Method::GET
}
fn endpoint(&self) -> Cow<'static, str> {
"enumerations/document_categories.json".into()
}
}
#[derive(Debug, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub struct DocumentCategoriesWrapper<T> {
pub document_categories: Vec<T>,
}
#[cfg(test)]
mod test {
use super::*;
use std::error::Error;
use tracing_test::traced_test;
#[traced_test]
#[test]
fn test_list_issue_priorities_no_pagination() -> Result<(), Box<dyn Error>> {
dotenvy::dotenv()?;
let redmine = crate::api::Redmine::from_env()?;
let endpoint = ListIssuePriorities::builder().build()?;
redmine.json_response_body::<_, IssuePrioritiesWrapper<IssuePriority>>(&endpoint)?;
Ok(())
}
#[traced_test]
#[test]
fn test_list_time_entry_activities_no_pagination() -> Result<(), Box<dyn Error>> {
dotenvy::dotenv()?;
let redmine = crate::api::Redmine::from_env()?;
let endpoint = ListTimeEntryActivities::builder().build()?;
redmine
.json_response_body::<_, TimeEntryActivitiesWrapper<TimeEntryActivity>>(&endpoint)?;
Ok(())
}
#[traced_test]
#[test]
fn test_list_document_categories_no_pagination() -> Result<(), Box<dyn Error>> {
dotenvy::dotenv()?;
let redmine = crate::api::Redmine::from_env()?;
let endpoint = ListDocumentCategories::builder().build()?;
redmine.json_response_body::<_, DocumentCategoriesWrapper<DocumentCategory>>(&endpoint)?;
Ok(())
}
}