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}