use crate::client::Scope;
use crate::error::Error;
use crate::generated::routes;
use crate::generated::types::*;
use crate::pagination::Page;
#[derive(Debug, Clone, Default, PartialEq)]
pub struct ListCardsParams {
pub board_ids: Option<Vec<String>>,
pub tag_ids: Option<Vec<String>>,
pub assignee_ids: Option<Vec<String>>,
pub creator_ids: Option<Vec<String>>,
pub closer_ids: Option<Vec<String>>,
pub card_ids: Option<Vec<String>>,
pub column_ids: Option<Vec<String>>,
pub indexed_by: Option<String>,
pub sorted_by: Option<String>,
pub assignment_status: Option<String>,
pub creation: Option<String>,
pub closure: Option<String>,
pub terms: Option<Vec<String>>,
}
#[derive(Debug, Clone, Default, PartialEq)]
pub struct ListActivitiesParams {
pub creator_ids: Option<Vec<String>>,
pub board_ids: Option<Vec<String>>,
}
pub struct CardsService<'a> {
scope: Scope<'a>,
}
impl<'a> CardsService<'a> {
pub(crate) fn new(scope: Scope<'a>) -> Self {
Self { scope }
}
pub fn scope(&self) -> &Scope<'a> {
&self.scope
}
pub async fn assign(
&self,
card_number: i32,
body: &AssignCardRequestContent,
) -> Result<(), Error> {
let mut operation = self
.scope
.operation(&routes::ASSIGN_CARD, &[&card_number])?;
operation.resource_id(card_number);
operation.json(body)?;
self.scope.client().send_unit(operation).await
}
pub async fn close(&self, card_number: i32) -> Result<(), Error> {
let mut operation = self.scope.operation(&routes::CLOSE_CARD, &[&card_number])?;
operation.resource_id(card_number);
self.scope.client().send_unit(operation).await
}
pub async fn create(&self, body: &CreateCardRequestContent) -> Result<Card, Error> {
let mut operation = self.scope.operation(&routes::CREATE_CARD, &[])?;
operation.json(body)?;
self.scope.client().send(operation).await
}
pub async fn delete(&self, card_number: i32) -> Result<(), Error> {
let mut operation = self
.scope
.operation(&routes::DELETE_CARD, &[&card_number])?;
operation.resource_id(card_number);
self.scope.client().send_unit(operation).await
}
pub async fn delete_image(&self, card_number: i32) -> Result<(), Error> {
let mut operation = self
.scope
.operation(&routes::DELETE_CARD_IMAGE, &[&card_number])?;
operation.resource_id(card_number);
self.scope.client().send_unit(operation).await
}
pub async fn get(&self, card_number: i32) -> Result<Card, Error> {
let mut operation = self.scope.operation(&routes::GET_CARD, &[&card_number])?;
operation.resource_id(card_number);
self.scope.client().send(operation).await
}
pub async fn gold(&self, card_number: i32) -> Result<(), Error> {
let mut operation = self.scope.operation(&routes::GOLD_CARD, &[&card_number])?;
operation.resource_id(card_number);
self.scope.client().send_unit(operation).await
}
pub async fn list(&self, params: &ListCardsParams) -> Result<Page<Vec<Card>>, Error> {
let mut operation = self.scope.operation(&routes::LIST_CARDS, &[])?;
operation.query_all_optional("board_ids[]", params.board_ids.as_deref());
operation.query_all_optional("tag_ids[]", params.tag_ids.as_deref());
operation.query_all_optional("assignee_ids[]", params.assignee_ids.as_deref());
operation.query_all_optional("creator_ids[]", params.creator_ids.as_deref());
operation.query_all_optional("closer_ids[]", params.closer_ids.as_deref());
operation.query_all_optional("card_ids[]", params.card_ids.as_deref());
operation.query_all_optional("column_ids[]", params.column_ids.as_deref());
operation.query_optional("indexed_by", params.indexed_by.as_ref());
operation.query_optional("sorted_by", params.sorted_by.as_ref());
operation.query_optional("assignment_status", params.assignment_status.as_ref());
operation.query_optional("creation", params.creation.as_ref());
operation.query_optional("closure", params.closure.as_ref());
operation.query_all_optional("terms[]", params.terms.as_deref());
self.scope.client().send_page(operation).await
}
pub async fn list_activities(
&self,
params: &ListActivitiesParams,
) -> Result<Page<Vec<Activity>>, Error> {
let mut operation = self.scope.operation(&routes::LIST_ACTIVITIES, &[])?;
operation.query_all_optional("creator_ids[]", params.creator_ids.as_deref());
operation.query_all_optional("board_ids[]", params.board_ids.as_deref());
self.scope.client().send_page(operation).await
}
pub async fn list_column_cards(
&self,
board_id: &str,
column_id: &str,
) -> Result<Page<Vec<Card>>, Error> {
let mut operation = self
.scope
.operation(&routes::LIST_COLUMN_CARDS, &[&board_id, &column_id])?;
operation.resource_id(board_id);
self.scope.client().send_page(operation).await
}
pub async fn mark_read(&self, card_number: i32) -> Result<(), Error> {
let mut operation = self
.scope
.operation(&routes::MARK_CARD_READ, &[&card_number])?;
operation.resource_id(card_number);
self.scope.client().send_unit(operation).await
}
pub async fn mark_unread(&self, card_number: i32) -> Result<(), Error> {
let mut operation = self
.scope
.operation(&routes::MARK_CARD_UNREAD, &[&card_number])?;
operation.resource_id(card_number);
self.scope.client().send_unit(operation).await
}
pub async fn move_to_board(
&self,
card_number: i32,
body: &MoveCardRequestContent,
) -> Result<Card, Error> {
let mut operation = self.scope.operation(&routes::MOVE_CARD, &[&card_number])?;
operation.resource_id(card_number);
operation.json(body)?;
self.scope.client().send(operation).await
}
pub async fn pin(&self, card_number: i32) -> Result<(), Error> {
let mut operation = self.scope.operation(&routes::PIN_CARD, &[&card_number])?;
operation.resource_id(card_number);
self.scope.client().send_unit(operation).await
}
pub async fn postpone(&self, card_number: i32) -> Result<(), Error> {
let mut operation = self
.scope
.operation(&routes::POSTPONE_CARD, &[&card_number])?;
operation.resource_id(card_number);
self.scope.client().send_unit(operation).await
}
pub async fn publish(&self, card_number: i32) -> Result<(), Error> {
let mut operation = self
.scope
.operation(&routes::PUBLISH_CARD, &[&card_number])?;
operation.resource_id(card_number);
self.scope.client().send_unit(operation).await
}
pub async fn reopen(&self, card_number: i32) -> Result<(), Error> {
let mut operation = self
.scope
.operation(&routes::REOPEN_CARD, &[&card_number])?;
operation.resource_id(card_number);
self.scope.client().send_unit(operation).await
}
pub async fn self_assign(&self, card_number: i32) -> Result<(), Error> {
let mut operation = self
.scope
.operation(&routes::SELF_ASSIGN_CARD, &[&card_number])?;
operation.resource_id(card_number);
self.scope.client().send_unit(operation).await
}
pub async fn tag(&self, card_number: i32, body: &TagCardRequestContent) -> Result<(), Error> {
let mut operation = self.scope.operation(&routes::TAG_CARD, &[&card_number])?;
operation.resource_id(card_number);
operation.json(body)?;
self.scope.client().send_unit(operation).await
}
pub async fn triage(
&self,
card_number: i32,
body: &TriageCardRequestContent,
) -> Result<(), Error> {
let mut operation = self
.scope
.operation(&routes::TRIAGE_CARD, &[&card_number])?;
operation.resource_id(card_number);
operation.json(body)?;
self.scope.client().send_unit(operation).await
}
pub async fn un_triage(&self, card_number: i32) -> Result<(), Error> {
let mut operation = self
.scope
.operation(&routes::UN_TRIAGE_CARD, &[&card_number])?;
operation.resource_id(card_number);
self.scope.client().send_unit(operation).await
}
pub async fn ungold(&self, card_number: i32) -> Result<(), Error> {
let mut operation = self
.scope
.operation(&routes::UNGOLD_CARD, &[&card_number])?;
operation.resource_id(card_number);
self.scope.client().send_unit(operation).await
}
pub async fn unpin(&self, card_number: i32) -> Result<(), Error> {
let mut operation = self.scope.operation(&routes::UNPIN_CARD, &[&card_number])?;
operation.resource_id(card_number);
self.scope.client().send_unit(operation).await
}
pub async fn unwatch(&self, card_number: i32) -> Result<(), Error> {
let mut operation = self
.scope
.operation(&routes::UNWATCH_CARD, &[&card_number])?;
operation.resource_id(card_number);
self.scope.client().send_unit(operation).await
}
pub async fn update(
&self,
card_number: i32,
body: &UpdateCardRequestContent,
) -> Result<Card, Error> {
let mut operation = self
.scope
.operation(&routes::UPDATE_CARD, &[&card_number])?;
operation.resource_id(card_number);
operation.json(body)?;
self.scope.client().send(operation).await
}
pub async fn watch(&self, card_number: i32) -> Result<(), Error> {
let mut operation = self.scope.operation(&routes::WATCH_CARD, &[&card_number])?;
operation.resource_id(card_number);
self.scope.client().send_unit(operation).await
}
}