1use collections::BTreeMap;
2use language::LanguageServerName;
3use serde::{Deserialize, Serialize};
4use std::{path::PathBuf, sync::Arc};
5
6/// This is the old version of the extension manifest, from when it was `extension.json`.
7#[derive(Clone, PartialEq, Eq, Debug, Deserialize, Serialize)]
8pub struct OldExtensionManifest {
9 pub name: String,
10 pub version: Arc<str>,
11
12 #[serde(default)]
13 pub description: Option<String>,
14 #[serde(default)]
15 pub repository: Option<String>,
16 #[serde(default)]
17 pub authors: Vec<String>,
18
19 #[serde(default)]
20 pub themes: BTreeMap<Arc<str>, PathBuf>,
21 #[serde(default)]
22 pub languages: BTreeMap<Arc<str>, PathBuf>,
23 #[serde(default)]
24 pub grammars: BTreeMap<Arc<str>, PathBuf>,
25}
26
27#[derive(Clone, PartialEq, Eq, Debug, Deserialize, Serialize)]
28pub struct ExtensionManifest {
29 pub id: Arc<str>,
30 pub name: String,
31 pub version: Arc<str>,
32
33 #[serde(default)]
34 pub description: Option<String>,
35 #[serde(default)]
36 pub repository: Option<String>,
37 #[serde(default)]
38 pub authors: Vec<String>,
39 #[serde(default)]
40 pub lib: LibManifestEntry,
41
42 #[serde(default)]
43 pub themes: Vec<PathBuf>,
44 #[serde(default)]
45 pub languages: Vec<PathBuf>,
46 #[serde(default)]
47 pub grammars: BTreeMap<Arc<str>, GrammarManifestEntry>,
48 #[serde(default)]
49 pub language_servers: BTreeMap<LanguageServerName, LanguageServerManifestEntry>,
50}
51
52#[derive(Clone, Default, PartialEq, Eq, Debug, Deserialize, Serialize)]
53pub struct LibManifestEntry {
54 pub kind: Option<ExtensionLibraryKind>,
55}
56
57#[derive(Clone, PartialEq, Eq, Debug, Deserialize, Serialize)]
58pub enum ExtensionLibraryKind {
59 Rust,
60}
61
62#[derive(Clone, Default, PartialEq, Eq, Debug, Deserialize, Serialize)]
63pub struct GrammarManifestEntry {
64 pub repository: String,
65 #[serde(alias = "commit")]
66 pub rev: String,
67}
68
69#[derive(Clone, PartialEq, Eq, Debug, Deserialize, Serialize)]
70pub struct LanguageServerManifestEntry {
71 pub language: Arc<str>,
72}