
This PR adds the general structure for filtering the extensions list by what the extensions provide. Currently flagged for Zed staff until we get some design direction on how best to present the filter. Release Notes: - N/A
61 lines
1.3 KiB
Rust
61 lines
1.3 KiB
Rust
use std::collections::BTreeSet;
|
|
use std::sync::Arc;
|
|
|
|
use chrono::{DateTime, Utc};
|
|
use serde::{Deserialize, Serialize};
|
|
use strum::EnumString;
|
|
|
|
#[derive(Clone, Serialize, Deserialize, Debug, PartialEq)]
|
|
pub struct ExtensionApiManifest {
|
|
pub name: String,
|
|
pub version: Arc<str>,
|
|
pub description: Option<String>,
|
|
pub authors: Vec<String>,
|
|
pub repository: String,
|
|
pub schema_version: Option<i32>,
|
|
pub wasm_api_version: Option<String>,
|
|
#[serde(default)]
|
|
pub provides: BTreeSet<ExtensionProvides>,
|
|
}
|
|
|
|
#[derive(
|
|
Debug,
|
|
PartialEq,
|
|
Eq,
|
|
PartialOrd,
|
|
Ord,
|
|
Hash,
|
|
Clone,
|
|
Copy,
|
|
Serialize,
|
|
Deserialize,
|
|
EnumString,
|
|
strum::Display,
|
|
)]
|
|
#[serde(rename_all = "kebab-case")]
|
|
#[strum(serialize_all = "kebab-case")]
|
|
pub enum ExtensionProvides {
|
|
Themes,
|
|
IconThemes,
|
|
Languages,
|
|
Grammars,
|
|
LanguageServers,
|
|
ContextServers,
|
|
SlashCommands,
|
|
IndexedDocsProviders,
|
|
Snippets,
|
|
}
|
|
|
|
#[derive(Clone, Serialize, Deserialize, Debug, PartialEq)]
|
|
pub struct ExtensionMetadata {
|
|
pub id: Arc<str>,
|
|
#[serde(flatten)]
|
|
pub manifest: ExtensionApiManifest,
|
|
pub published_at: DateTime<Utc>,
|
|
pub download_count: u64,
|
|
}
|
|
|
|
#[derive(Serialize, Deserialize)]
|
|
pub struct GetExtensionsResponse {
|
|
pub data: Vec<ExtensionMetadata>,
|
|
}
|