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, PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Copy, Serialize, Deserialize, EnumString,
23)]
24#[serde(rename_all = "kebab-case")]
25#[strum(serialize_all = "kebab-case")]
26pub enum ExtensionProvides {
27    Themes,
28    IconThemes,
29    Languages,
30    Grammars,
31    LanguageServers,
32    ContextServers,
33    SlashCommands,
34    IndexedDocsProviders,
35    Snippets,
36}
37
38#[derive(Clone, Serialize, Deserialize, Debug, PartialEq)]
39pub struct ExtensionMetadata {
40    pub id: Arc<str>,
41    #[serde(flatten)]
42    pub manifest: ExtensionApiManifest,
43    pub published_at: DateTime<Utc>,
44    pub download_count: u64,
45}
46
47#[derive(Serialize, Deserialize)]
48pub struct GetExtensionsResponse {
49    pub data: Vec<ExtensionMetadata>,
50}