supabase_management_rs/
query.rs

1use serde::{de::DeserializeOwned, Serialize};
2
3use crate::Client;
4
5impl Client {
6    /// [Beta endpoint] Executes a Postgres query using the Supabase Management API.
7    ///
8    /// ```no_run
9    /// # use serde::Deserialize;
10    /// # async fn run_query() -> Result<(), Box<dyn std::error::Error>> {
11    /// # let client = supabase_management_rs::Client::new("dummy".to_string());
12    ///
13    /// #     let project_id = "dummy";
14    ///
15    /// #[derive(Deserialize, PartialEq, Debug)]
16    /// struct Row {
17    ///     id: i32,
18    ///     hash_value: String,
19    /// }
20    ///
21    /// let rows: Vec<Row> = client
22    ///     .query(
23    ///         project_id,
24    ///         "SELECT generate_series(1, 3) AS id, \
25    ///         md5(generate_series(1, 3)::text) AS hash_value",
26    ///     )
27    ///     .await?;
28    ///
29    /// assert_eq!(
30    ///     rows,
31    ///     [
32    ///         Row {
33    ///             id: 1,
34    ///             hash_value: "c4ca4238a0b923820dcc509a6f75849b".into(),
35    ///         },
36    ///         Row {
37    ///             id: 2,
38    ///             hash_value: "c81e728d9d4c2f636f067f89cc14862c".into(),
39    ///         },
40    ///         Row {
41    ///             id: 3,
42    ///             hash_value: "eccbc87e4b5ce2fe28308fd9f2a7baf3".into(),
43    ///         },
44    ///     ]
45    /// );
46    /// #     Ok(())
47    /// # }
48    pub async fn query<T: DeserializeOwned>(
49        &self,
50        project_id: &str,
51        query: &str,
52    ) -> Result<T, crate::Error> {
53        #[derive(Serialize)]
54        struct Body<'a> {
55            query: &'a str,
56        }
57
58        // CLIENT
59        //     .post(&url)
60        //     .bearer_auth(&self.api_key)
61        //     .json(&Body { query })
62        //     .send()
63        //     .await?
64        //     .json()
65        //     .await
66
67        self.post(
68            format!("projects/{project_id}/database/query"),
69            Some(&Body { query }),
70        )
71        .await
72    }
73}