extension.rs

 1use std::collections::BTreeSet;
 2use std::sync::Arc;
 3
 4use chrono::{DateTime, Utc};
 5use serde::{Deserialize, Serialize};
 6use strum::EnumString;
 7
 8#[derive(Clone, Serialize, Deserialize, Debug, PartialEq)]
 9pub struct ExtensionApiManifest {
10    pub name: String,
11    pub version: Arc<str>,
12    pub description: Option<String>,
13    pub authors: Vec<String>,
14    pub repository: String,
15    pub schema_version: Option<i32>,
16    pub wasm_api_version: Option<String>,
17    #[serde(default)]
18    pub provides: BTreeSet<ExtensionProvides>,
19}
20
21#[derive(
22    Debug,
23    PartialEq,
24    Eq,
25    PartialOrd,
26    Ord,
27    Hash,
28    Clone,
29    Copy,
30    Serialize,
31    Deserialize,
32    EnumString,
33    strum::Display,
34    strum::EnumIter,
35)]
36#[serde(rename_all = "kebab-case")]
37#[strum(serialize_all = "kebab-case")]
38pub enum ExtensionProvides {
39    Themes,
40    IconThemes,
41    Languages,
42    Grammars,
43    LanguageServers,
44    ContextServers,
45    AgentServers,
46    SlashCommands,
47    IndexedDocsProviders,
48    Snippets,
49    DebugAdapters,
50}
51
52#[derive(Clone, Serialize, Deserialize, Debug, PartialEq)]
53pub struct ExtensionMetadata {
54    pub id: Arc<str>,
55    #[serde(flatten)]
56    pub manifest: ExtensionApiManifest,
57    pub published_at: DateTime<Utc>,
58    pub download_count: u64,
59}
60
61#[derive(Serialize, Deserialize)]
62pub struct GetExtensionsResponse {
63    pub data: Vec<ExtensionMetadata>,
64}