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    SlashCommands,
46    IndexedDocsProviders,
47    Snippets,
48    DebugAdapters,
49}
50
51#[derive(Clone, Serialize, Deserialize, Debug, PartialEq)]
52pub struct ExtensionMetadata {
53    pub id: Arc<str>,
54    #[serde(flatten)]
55    pub manifest: ExtensionApiManifest,
56    pub published_at: DateTime<Utc>,
57    pub download_count: u64,
58}
59
60#[derive(Serialize, Deserialize)]
61pub struct GetExtensionsResponse {
62    pub data: Vec<ExtensionMetadata>,
63}