support comment operations
This commit is contained in:
		
							parent
							
								
									9da230e5ee
								
							
						
					
					
						commit
						ffbbfaf898
					
				
					 1 changed files with 88 additions and 1 deletions
				
			
		
							
								
								
									
										89
									
								
								src/issue.rs
									
										
									
									
									
								
							
							
						
						
									
										89
									
								
								src/issue.rs
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -17,9 +17,35 @@ impl Forgejo {
 | 
			
		|||
        self.delete(&format!("/repos/{owner}/{repo}/issues/{id}")).await
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub async fn edit_issue(&self, owner: &str, repo: &str, id: u64, opts: EditIssueOption) -> Result<(), ForgejoError> {
 | 
			
		||||
    pub async fn edit_issue(&self, owner: &str, repo: &str, id: u64, opts: EditIssueOption) -> Result<Issue, ForgejoError> {
 | 
			
		||||
        self.patch(&format!("/repos/{owner}/{repo}/issues/{id}"), &opts).await
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    pub async fn get_repo_comments(&self, owner: &str, repo: &str, query: RepoCommentQuery) -> Result<Vec<Comment>, ForgejoError> {
 | 
			
		||||
        self.get(&query.to_string(owner, repo)).await
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub async fn get_issue_comments(&self, owner: &str, repo: &str, issue_id: u64, query: IssueCommentQuery) -> Result<Vec<Comment>, ForgejoError> {
 | 
			
		||||
        self.get(&query.to_string(owner, repo, issue_id)).await
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub async fn create_comment(&self, owner: &str, repo: &str, issue_id: u64, opts: CreateIssueCommentOption) -> Result<Comment, ForgejoError> {
 | 
			
		||||
        self.post(&format!("/repos/{owner}/{repo}/issues/{issue_id}/comments"), &opts).await
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub async fn get_comment(&self, owner: &str, repo: &str, id: u64) -> Result<Option<Comment>, ForgejoError> {
 | 
			
		||||
        self.get_opt(&format!("/repos/{owner}/{repo}/issues/comments/{id}")).await
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub async fn delete_comment(&self, owner: &str, repo: &str, id: u64) -> Result<(), ForgejoError> {
 | 
			
		||||
        self.delete(&format!("/repos/{owner}/{repo}/issues/comments/{id}")).await
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub async fn edit_comment(&self, owner: &str, repo: &str, id: u64, opts: EditIssueCommentOption) -> Result<Comment, ForgejoError> {
 | 
			
		||||
        self.patch(&format!("/repos/{owner}/{repo}/issues/comments/{id}"), &opts).await
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(serde::Deserialize, Debug, PartialEq)]
 | 
			
		||||
| 
						 | 
				
			
			@ -93,6 +119,23 @@ impl State {
 | 
			
		|||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(serde::Deserialize, Debug, PartialEq)]
 | 
			
		||||
pub struct Comment {
 | 
			
		||||
    pub assets: Vec<Attachment>,
 | 
			
		||||
    pub body: String,
 | 
			
		||||
    #[serde(with = "time::serde::rfc3339")]
 | 
			
		||||
    pub created_at: time::OffsetDateTime,
 | 
			
		||||
    pub html_url: Url,
 | 
			
		||||
    pub id: u64,
 | 
			
		||||
    pub issue_url: Url,
 | 
			
		||||
    pub original_author: String,
 | 
			
		||||
    pub original_author_id: u64,
 | 
			
		||||
    pub pull_request_url: Url,
 | 
			
		||||
    #[serde(with = "time::serde::rfc3339")]
 | 
			
		||||
    pub updated_at: time::OffsetDateTime,
 | 
			
		||||
    pub user: User,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Default, Debug)]
 | 
			
		||||
pub struct IssueQuery {
 | 
			
		||||
    pub state: Option<State>,
 | 
			
		||||
| 
						 | 
				
			
			@ -143,6 +186,40 @@ impl IssueQueryType {
 | 
			
		|||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Default, Debug)]
 | 
			
		||||
pub struct IssueCommentQuery {
 | 
			
		||||
    pub since: Option<time::OffsetDateTime>,
 | 
			
		||||
    pub before: Option<time::OffsetDateTime>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl IssueCommentQuery {
 | 
			
		||||
    fn to_string(&self, owner: &str, repo: &str, issue_id: u64) -> String {
 | 
			
		||||
        format!("/repos/{owner}/{repo}/issues/{issue_id}/comments?since={}&before={}",
 | 
			
		||||
            self.since.map(|t| t.format(&time::format_description::well_known::Rfc3339).unwrap()).unwrap_or_default(),
 | 
			
		||||
            self.before.map(|t| t.format(&time::format_description::well_known::Rfc3339).unwrap()).unwrap_or_default(),
 | 
			
		||||
        )
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Default, Debug)]
 | 
			
		||||
pub struct RepoCommentQuery {
 | 
			
		||||
    pub since: Option<time::OffsetDateTime>,
 | 
			
		||||
    pub before: Option<time::OffsetDateTime>,
 | 
			
		||||
    pub page: Option<u32>,
 | 
			
		||||
    pub limit: Option<u32>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl RepoCommentQuery {
 | 
			
		||||
    fn to_string(&self, owner: &str, repo: &str) -> String {
 | 
			
		||||
        format!("/repos/{owner}/{repo}/issues/comments?since={}&before={}&page={}&limit={}",
 | 
			
		||||
            self.since.map(|t| t.format(&time::format_description::well_known::Rfc3339).unwrap()).unwrap_or_default(),
 | 
			
		||||
            self.before.map(|t| t.format(&time::format_description::well_known::Rfc3339).unwrap()).unwrap_or_default(),
 | 
			
		||||
            self.page.map(|page| page.to_string()).unwrap_or_default(),
 | 
			
		||||
            self.limit.map(|page| page.to_string()).unwrap_or_default(),
 | 
			
		||||
        )
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(serde::Serialize, Debug, PartialEq, Default)]
 | 
			
		||||
pub struct CreateIssueOption {
 | 
			
		||||
    pub assignees: Vec<String>,
 | 
			
		||||
| 
						 | 
				
			
			@ -169,3 +246,13 @@ pub struct EditIssueOption {
 | 
			
		|||
    pub title: Option<String>,
 | 
			
		||||
    pub unset_due_date: Option<bool>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(serde::Serialize, Debug, PartialEq, Default)]
 | 
			
		||||
pub struct CreateIssueCommentOption {
 | 
			
		||||
    body: String,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(serde::Serialize, Debug, PartialEq, Default)]
 | 
			
		||||
pub struct EditIssueCommentOption {
 | 
			
		||||
    body: String,
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue