add release download methods
This commit is contained in:
		
							parent
							
								
									78d44348da
								
							
						
					
					
						commit
						2e50a93f1e
					
				
					 4 changed files with 48 additions and 0 deletions
				
			
		
							
								
								
									
										1
									
								
								Cargo.lock
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										1
									
								
								Cargo.lock
									
										
									
										generated
									
									
									
								
							| 
						 | 
				
			
			@ -169,6 +169,7 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
 | 
			
		|||
name = "forgejo-api"
 | 
			
		||||
version = "0.1.0"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "bytes",
 | 
			
		||||
 "eyre",
 | 
			
		||||
 "reqwest",
 | 
			
		||||
 "serde",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,6 +14,7 @@ url = { version = "2.4.0", features = ["serde"] }
 | 
			
		|||
serde = { version = "1.0.168", features = ["derive"] }
 | 
			
		||||
time = { version = "0.3.22", features = ["parsing", "serde", "formatting"] }
 | 
			
		||||
serde_json = "1.0.108"
 | 
			
		||||
bytes = "1.5.0"
 | 
			
		||||
 | 
			
		||||
[dev-dependencies]
 | 
			
		||||
eyre = "0.6.9"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										18
									
								
								src/lib.rs
									
										
									
									
									
								
							
							
						
						
									
										18
									
								
								src/lib.rs
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -180,6 +180,24 @@ impl Forgejo {
 | 
			
		|||
            status => Err(ForgejoError::UnexpectedStatusCode(status)),
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    /// Like `execute`, but returns a `String`.
 | 
			
		||||
    async fn execute_opt_raw(&self, request: Request) -> Result<Option<bytes::Bytes>, ForgejoError> {
 | 
			
		||||
        let response = self.client.execute(request).await?;
 | 
			
		||||
        match response.status() {
 | 
			
		||||
            status if status.is_success() => Ok(Some(response.bytes().await?)),
 | 
			
		||||
            StatusCode::NOT_FOUND => Ok(None),
 | 
			
		||||
            status if status.is_client_error() => Err(ForgejoError::ApiError(
 | 
			
		||||
                status,
 | 
			
		||||
                response
 | 
			
		||||
                    .json::<ErrorMessage>()
 | 
			
		||||
                    .await?
 | 
			
		||||
                    .message
 | 
			
		||||
                    .unwrap_or_else(|| String::from("[no message]")),
 | 
			
		||||
            )),
 | 
			
		||||
            status => Err(ForgejoError::UnexpectedStatusCode(status)),
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// Like `execute`, but returns a `String`.
 | 
			
		||||
    async fn execute_str(&self, request: Request) -> Result<String, ForgejoError> {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -207,6 +207,34 @@ impl Forgejo {
 | 
			
		|||
            .await
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub async fn download_release_zip(&self, owner: &str, repo: &str, release: u64) -> Result<Option<bytes::Bytes>, ForgejoError> {
 | 
			
		||||
        let release = self.get_release(owner, repo, release).await;
 | 
			
		||||
        let release = match release {
 | 
			
		||||
            Ok(Some(release)) => release,
 | 
			
		||||
            Ok(None) => return Ok(None),
 | 
			
		||||
            Err(e) => return Err(e),
 | 
			
		||||
        };
 | 
			
		||||
        let request = self.client.get(release.zipball_url).build()?;
 | 
			
		||||
        self.execute_opt_raw(request).await
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub async fn download_release_tarball(&self, owner: &str, repo: &str, release: u64) -> Result<Option<bytes::Bytes>, ForgejoError> {
 | 
			
		||||
        let release = self.get_release(owner, repo, release).await;
 | 
			
		||||
        let release = match release {
 | 
			
		||||
            Ok(Some(release)) => release,
 | 
			
		||||
            Ok(None) => return Ok(None),
 | 
			
		||||
            Err(e) => return Err(e),
 | 
			
		||||
        };
 | 
			
		||||
        let request = self.client.get(release.tarball_url).build()?;
 | 
			
		||||
        self.execute_opt_raw(request).await
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub async fn download_release_attachment(&self, owner: &str, repo: &str, release: u64, attach: u64) -> Result<Option<bytes::Bytes>, ForgejoError> {
 | 
			
		||||
        let release = self.get_release_attachment(owner, repo, release, attach).await?;
 | 
			
		||||
        let request = self.client.get(release.browser_download_url).build()?;
 | 
			
		||||
        self.execute_opt_raw(request).await
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub async fn get_tags(
 | 
			
		||||
        &self,
 | 
			
		||||
        owner: &str,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue