Skip to main content

telos_agent/integrations/plugin/
sources.rs

1//! Source types for marketplaces — where marketplace.json comes from.
2
3use serde::{Deserialize, Serialize};
4use std::path::PathBuf;
5
6use crate::integrations::plugin::manifest::MarketplaceEntry;
7
8/// Where a marketplace manifest is fetched from.
9#[derive(Debug, Clone, Serialize, Deserialize)]
10#[serde(tag = "type", rename_all = "lowercase")]
11pub enum MarketplaceSource {
12    /// GitHub repository containing marketplace.json.
13    #[serde(rename_all = "camelCase")]
14    GitHub {
15        repo: String,
16        #[serde(rename = "ref", skip_serializing_if = "Option::is_none")]
17        ref_: Option<String>,
18        #[serde(skip_serializing_if = "Option::is_none")]
19        path: Option<String>,
20    },
21    /// Arbitrary git URL.
22    #[serde(rename_all = "camelCase")]
23    Git {
24        url: String,
25        #[serde(rename = "ref", skip_serializing_if = "Option::is_none")]
26        ref_: Option<String>,
27        #[serde(skip_serializing_if = "Option::is_none")]
28        path: Option<String>,
29    },
30    /// Direct URL to marketplace.json.
31    #[serde(rename_all = "camelCase")]
32    Url { url: String },
33    /// npm package containing marketplace.json.
34    #[serde(rename_all = "camelCase")]
35    Npm { package: String },
36    /// Local directory containing marketplace.json.
37    #[serde(rename_all = "camelCase")]
38    Local { path: PathBuf },
39    /// Inline marketplace defined in config (no remote fetch needed).
40    #[serde(rename_all = "camelCase")]
41    Inline { name: String, plugins: Vec<MarketplaceEntry> },
42}