ZIm/crates/rpc/src/extension.rs
Marshall Bowers 4e5b11a0a7
extensions_ui: Add general structure for filtering extensions by what they provide (#24325)
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
2025-02-06 00:09:37 +00:00

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>,
}