diff --git a/crates/collab/src/api/extensions.rs b/crates/collab/src/api/extensions.rs index 1c29270f88..003d9636ae 100644 --- a/crates/collab/src/api/extensions.rs +++ b/crates/collab/src/api/extensions.rs @@ -9,8 +9,8 @@ use axum::{ Extension, Json, Router, }; use collections::HashMap; -use rpc::{ExtensionApiManifest, ExtensionMetadata}; -use serde::{Deserialize, Serialize}; +use rpc::{ExtensionApiManifest, GetExtensionsResponse}; +use serde::Deserialize; use std::{sync::Arc, time::Duration}; use time::PrimitiveDateTime; use util::ResultExt; @@ -46,11 +46,6 @@ struct DownloadExtensionParams { version: String, } -#[derive(Debug, Serialize)] -struct GetExtensionsResponse { - pub data: Vec, -} - async fn get_extensions( Extension(app): Extension>, Query(params): Query, @@ -75,7 +70,7 @@ async fn download_latest_extension( Extension(app), Path(DownloadExtensionParams { extension_id: params.extension_id, - version: extension.manifest.version, + version: extension.manifest.version.to_string(), }), ) .await diff --git a/crates/collab/src/db/queries/extensions.rs b/crates/collab/src/db/queries/extensions.rs index 9304c3c60a..aaa982662b 100644 --- a/crates/collab/src/db/queries/extensions.rs +++ b/crates/collab/src/db/queries/extensions.rs @@ -243,10 +243,10 @@ fn metadata_from_extension_and_version( version: extension_version::Model, ) -> ExtensionMetadata { ExtensionMetadata { - id: extension.external_id, + id: extension.external_id.into(), manifest: rpc::ExtensionApiManifest { name: extension.name, - version: version.version, + version: version.version.into(), authors: version .authors .split(',') diff --git a/crates/extension/src/extension_store.rs b/crates/extension/src/extension_store.rs index 46c80d082f..02fdfd97fb 100644 --- a/crates/extension/src/extension_store.rs +++ b/crates/extension/src/extension_store.rs @@ -10,7 +10,7 @@ use crate::{extension_lsp_adapter::ExtensionLspAdapter, wasm_host::wit}; use anyhow::{anyhow, bail, Context as _, Result}; use async_compression::futures::bufread::GzipDecoder; use async_tar::Archive; -use client::{telemetry::Telemetry, Client}; +use client::{telemetry::Telemetry, Client, ExtensionMetadata, GetExtensionsResponse}; use collections::{hash_map, BTreeMap, HashMap, HashSet}; use extension_builder::{CompileExtensionOptions, ExtensionBuilder}; use fs::{Fs, RemoveOptions}; @@ -54,22 +54,6 @@ const FS_WATCH_LATENCY: Duration = Duration::from_millis(100); const CURRENT_SCHEMA_VERSION: i64 = 1; -#[derive(Deserialize)] -pub struct ExtensionsApiResponse { - pub data: Vec, -} - -#[derive(Clone, Deserialize)] -pub struct ExtensionApiResponse { - pub id: Arc, - pub name: String, - pub version: Arc, - pub description: Option, - pub authors: Vec, - pub repository: String, - pub download_count: usize, -} - pub struct ExtensionStore { builder: Arc, extension_index: ExtensionIndex, @@ -386,7 +370,7 @@ impl ExtensionStore { &self, search: Option<&str>, cx: &mut ModelContext, - ) -> Task>> { + ) -> Task>> { let version = CURRENT_SCHEMA_VERSION.to_string(); let mut query = vec![("max_schema_version", version.as_str())]; if let Some(search) = search { @@ -415,8 +399,7 @@ impl ExtensionStore { ); } - let response: ExtensionsApiResponse = serde_json::from_slice(&body)?; - + let response: GetExtensionsResponse = serde_json::from_slice(&body)?; Ok(response.data) }) } diff --git a/crates/extension_cli/src/main.rs b/crates/extension_cli/src/main.rs index ee252dc732..5aa99ab9ae 100644 --- a/crates/extension_cli/src/main.rs +++ b/crates/extension_cli/src/main.rs @@ -92,7 +92,7 @@ async fn main() -> Result<()> { let manifest_json = serde_json::to_string(&rpc::ExtensionApiManifest { name: manifest.name, - version: manifest.version.to_string(), + version: manifest.version, description: manifest.description, authors: manifest.authors, schema_version: Some(manifest.schema_version), diff --git a/crates/extensions_ui/src/extensions_ui.rs b/crates/extensions_ui/src/extensions_ui.rs index 9b7d9aaa80..dd3500119d 100644 --- a/crates/extensions_ui/src/extensions_ui.rs +++ b/crates/extensions_ui/src/extensions_ui.rs @@ -3,8 +3,9 @@ mod extension_suggest; use crate::components::ExtensionCard; use client::telemetry::Telemetry; +use client::ExtensionMetadata; use editor::{Editor, EditorElement, EditorStyle}; -use extension::{ExtensionApiResponse, ExtensionManifest, ExtensionStatus, ExtensionStore}; +use extension::{ExtensionManifest, ExtensionStatus, ExtensionStore}; use fuzzy::{match_strings, StringMatchCandidate}; use gpui::{ actions, canvas, uniform_list, AnyElement, AppContext, EventEmitter, FocusableView, FontStyle, @@ -97,7 +98,7 @@ pub struct ExtensionsPage { telemetry: Arc, is_fetching_extensions: bool, filter: ExtensionFilter, - remote_extension_entries: Vec, + remote_extension_entries: Vec, dev_extension_entries: Vec>, filtered_remote_extension_indices: Vec, query_editor: View, @@ -385,7 +386,7 @@ impl ExtensionsPage { fn render_remote_extension( &self, - extension: &ExtensionApiResponse, + extension: &ExtensionMetadata, cx: &mut ViewContext, ) -> ExtensionCard { let status = ExtensionStore::global(cx) @@ -394,7 +395,7 @@ impl ExtensionsPage { let (install_or_uninstall_button, upgrade_button) = self.buttons_for_entry(extension, &status, cx); - let repository_url = extension.repository.clone(); + let repository_url = extension.manifest.repository.clone(); ExtensionCard::new() .child( @@ -404,9 +405,12 @@ impl ExtensionsPage { h_flex() .gap_2() .items_end() - .child(Headline::new(extension.name.clone()).size(HeadlineSize::Medium)) .child( - Headline::new(format!("v{}", extension.version)) + Headline::new(extension.manifest.name.clone()) + .size(HeadlineSize::Medium), + ) + .child( + Headline::new(format!("v{}", extension.manifest.version)) .size(HeadlineSize::XSmall), ), ) @@ -424,12 +428,12 @@ impl ExtensionsPage { .child( Label::new(format!( "{}: {}", - if extension.authors.len() > 1 { + if extension.manifest.authors.len() > 1 { "Authors" } else { "Author" }, - extension.authors.join(", ") + extension.manifest.authors.join(", ") )) .size(LabelSize::Small), ) @@ -442,7 +446,7 @@ impl ExtensionsPage { h_flex() .gap_2() .justify_between() - .children(extension.description.as_ref().map(|description| { + .children(extension.manifest.description.as_ref().map(|description| { h_flex().overflow_x_hidden().child( Label::new(description.clone()) .size(LabelSize::Small) @@ -470,7 +474,7 @@ impl ExtensionsPage { fn buttons_for_entry( &self, - extension: &ExtensionApiResponse, + extension: &ExtensionMetadata, status: &ExtensionStatus, cx: &mut ViewContext, ) -> (Button, Option