Skip to main content

mesa_dev/resources/
diffs.rs

1//! Diff operations.
2//!
3//! Access via [`MesaClient::diffs`](crate::MesaClient::diffs):
4//!
5//! ```rust,no_run
6//! # use mesa_dev::{Mesa, MesaError};
7//! # async fn run() -> Result<(), MesaError> {
8//! # let client = Mesa::new("key");
9//! let diff = client.diffs("my-org", "my-repo").get("main", "feature").await?;
10//! # Ok(())
11//! # }
12//! ```
13
14use http::Method;
15
16use crate::client::MesaClient;
17use crate::error::MesaError;
18use crate::http_client::HttpClient;
19use crate::models::Diff;
20
21/// Operations on diffs within a repository.
22pub struct DiffsResource<'c, C: HttpClient> {
23    client: &'c MesaClient<C>,
24    org: String,
25    repo: String,
26}
27
28impl<'c, C: HttpClient> DiffsResource<'c, C> {
29    pub(crate) fn new(client: &'c MesaClient<C>, org: String, repo: String) -> Self {
30        Self { client, org, repo }
31    }
32
33    /// Get the diff between two refs.
34    ///
35    /// # Errors
36    ///
37    /// Returns [`MesaError`] if the API request fails.
38    pub async fn get(&self, base: &str, head: &str) -> Result<Diff, MesaError> {
39        let path = format!("/{}/{}/diff", self.org, self.repo);
40        self.client
41            .request(
42                Method::GET,
43                &path,
44                &[("base", base), ("head", head)],
45                None::<&()>,
46            )
47            .await
48    }
49}