Skip to main content

oxide_cli/addons/
publish.rs

1use anyhow::Result;
2use serde::{Deserialize, Serialize};
3
4use crate::{AppContext, auth::token::get_auth_user};
5
6#[derive(Serialize)]
7struct PublishAddonDto {
8  url: String,
9}
10
11#[derive(Deserialize)]
12struct PublishAddonResponse {
13  message: String,
14  addon_id: String,
15}
16
17pub async fn publish_addon(ctx: &AppContext, addon_url: &str) -> Result<()> {
18  let user = get_auth_user(&ctx.paths.auth)?;
19
20  let res: PublishAddonResponse = ctx
21    .client
22    .post(format!("{}/addon/publish", ctx.backend_url))
23    .bearer_auth(user.token)
24    .header("Content-Type", "application/json")
25    .json(&PublishAddonDto {
26      url: addon_url.to_string(),
27    })
28    .send()
29    .await?
30    .error_for_status()?
31    .json()
32    .await?;
33
34  println!("✅ {}", res.message);
35  println!("   Addon: {}", res.addon_id);
36  Ok(())
37}