1use super::client::DiscourseClient;
2use super::error::http_error;
3use anyhow::{Context, Result};
4use serde_json::Value;
5
6impl DiscourseClient {
7 pub fn create_backup(&self) -> Result<()> {
9 let payload = [("with_uploads", "true")];
10 let response = self.send_retrying(|| Ok(self.post("/admin/backups.json")?.form(&payload)))?;
11 let status = response.status();
12 let text = response.text().context("reading backup create response")?;
13 if !status.is_success() {
14 return Err(http_error("create backup request", status, &text));
15 }
16 Ok(())
17 }
18
19 pub fn list_backups(&self) -> Result<Value> {
21 let response = self.get("/admin/backups.json")?;
22 let status = response.status();
23 let text = response.text().context("reading backups list response")?;
24 if !status.is_success() {
25 return Err(http_error("list backups request", status, &text));
26 }
27 let body: Value = serde_json::from_str(&text).context("parsing backups list json")?;
28 Ok(body)
29 }
30
31 pub fn restore_backup(&self, backup_path: &str) -> Result<()> {
33 let path = format!("/admin/backups/{}/restore", backup_path);
34 let response = self.send_retrying(|| Ok(self.post(&path)?))?;
35 let status = response.status();
36 let text = response.text().context("reading backup restore response")?;
37 if !status.is_success() {
38 return Err(http_error("restore backup request", status, &text));
39 }
40 Ok(())
41 }
42}