extension.rs

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