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
11 .post("/admin/backups.json")?
12 .form(&payload)
13 .send()
14 .context("creating backup")?;
15 let status = response.status();
16 let text = response.text().context("reading backup create response")?;
17 if !status.is_success() {
18 return Err(http_error("create backup request", status, &text));
19 }
20 Ok(())
21 }
22
23 pub fn list_backups(&self) -> Result<Value> {
25 let response = self.get("/admin/backups.json")?;
26 let status = response.status();
27 let text = response.text().context("reading backups list response")?;
28 if !status.is_success() {
29 return Err(http_error("list backups request", status, &text));
30 }
31 let body: Value = serde_json::from_str(&text).context("parsing backups list json")?;
32 Ok(body)
33 }
34
35 pub fn restore_backup(&self, backup_path: &str) -> Result<()> {
37 let path = format!("/admin/backups/{}/restore", backup_path);
38 let response = self.post(&path)?.send().context("restoring backup")?;
39 let status = response.status();
40 let text = response.text().context("reading backup restore response")?;
41 if !status.is_success() {
42 return Err(http_error("restore backup request", status, &text));
43 }
44 Ok(())
45 }
46}