github.rs 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. mod release;
  2. pub use release::*;
  3. use crate::http;
  4. pub fn get_latest_release(repo_owner: &str, repo_name: &str) -> crate::Result<Release> {
  5. set_ssl_vars!();
  6. let api_url = format!(
  7. "https://api.github.com/repos/{}/{}/releases/latest",
  8. repo_owner, repo_name
  9. );
  10. let resp = http::get(api_url.clone())?;
  11. if !resp.status().is_success() {
  12. return Err(
  13. crate::Error::Network(format!(
  14. "api request failed with status: {:?} - for: {:?}",
  15. resp.status(),
  16. api_url
  17. ))
  18. .into(),
  19. );
  20. }
  21. let json = resp.json::<serde_json::Value>()?;
  22. Ok(Release::parse(&json)?)
  23. }
  24. pub fn get_release_version(repo_owner: &str, repo_name: &str, ver: &str) -> crate::Result<Release> {
  25. set_ssl_vars!();
  26. let api_url = format!(
  27. "https://api.github.com/repos/{}/{}/releases/tags/{}",
  28. repo_owner, repo_name, ver
  29. );
  30. let resp = http::get(api_url.clone())?;
  31. if !resp.status().is_success() {
  32. return Err(
  33. crate::Error::Network(format!(
  34. "api request failed with status: {:?} - for: {:?}",
  35. resp.status(),
  36. api_url
  37. ))
  38. .into(),
  39. );
  40. }
  41. let json = resp.json::<serde_json::Value>()?;
  42. Ok(Release::parse(&json)?)
  43. }