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