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}