pub struct ExtensionDescriptionStateDTO {Show 27 fields
pub Identifier: Value,
pub Name: String,
pub Version: String,
pub Publisher: String,
pub Engines: Value,
pub Main: Option<String>,
pub Browser: Option<String>,
pub ModuleType: Option<String>,
pub IsBuiltin: bool,
pub IsUnderDevelopment: bool,
pub ExtensionLocation: Value,
pub ActivationEvents: Option<Vec<String>>,
pub Contributes: Option<Value>,
pub Categories: Option<Vec<String>>,
pub DisplayName: Option<String>,
pub Description: Option<String>,
pub Keywords: Option<Vec<String>>,
pub Repository: Option<Value>,
pub Bugs: Option<Value>,
pub Homepage: Option<String>,
pub License: Option<String>,
pub Icon: Option<String>,
pub AiKey: Option<String>,
pub ExtensionKind: Option<Value>,
pub Capabilities: Option<Value>,
pub ExtensionDependencies: Option<Vec<String>>,
pub ExtensionPack: Option<Vec<String>>,
}Expand description
Represents the deserialized content of an extension’s package.json file,
augmented with location information and other metadata.
This is stored in ApplicationState to provide the extension host with the
list of available extensions and their capabilities.
VS Code extensions use camelCase in package.json. Serde renames from
PascalCase Rust fields to camelCase JSON automatically. Fields that
don’t exist in package.json (Identifier, ExtensionLocation, IsBuiltin)
default to their zero values on deserialization.
Fields§
§Identifier: ValueExtension identifier: { value: string, uuid?: string } Not present in package.json - constructed from publisher.name after parsing.
Name: StringExtension name (from package.json “name”)
Always serialized, even when empty, because VS Code’s scanner and
the trusted-publishers migration (extensions.contribution.ts) both
evaluate extension.manifest.name.toLowerCase() unconditionally.
Dropping the field would leave a bare undefined and crash the
renderer with TypeError: undefined is not an object.
Version: StringSemantic version string (e.g., “1.0.0”).
Always serialized for the same reason as Name / Publisher: the
renderer reads manifest.version in several hot paths and crashes
if the field is missing outright.
Publisher: StringPublisher name or identifier.
Always serialized, even when empty. VS Code’s
extensions.contribution.ts trusted-publishers migration runs on
every User-extension at workbench boot and executes
extension.manifest.publisher.toLowerCase(). If the key is omitted
the renderer crashes with
TypeError: undefined is not an object (evaluating 'manifest.publisher').
Engines: ValueEngine compatibility requirements: { vscode: string }
Main: Option<String>Main entry point path (Node.js runtime)
Browser: Option<String>Browser entry point path (web extension)
ModuleType: Option<String>Module type: commonjs or esm
IsBuiltin: boolWhether this is a built-in extension (not in package.json, set by scanner)
IsUnderDevelopment: boolWhether extension is under active development
ExtensionLocation: ValueInstallation location URI (set by scanner, not in package.json)
ActivationEvents: Option<Vec<String>>Activation event triggers (e.g., “onStartupFinished”)
Contributes: Option<Value>Extension contributions (commands, views, etc.)
Categories: Option<Vec<String>>VS Code category tags (“Themes”, “Programming Languages”, “Snippets”, “Language Packs”, “Debuggers”, “Formatters”, “Keymaps”, “SCM Providers”, “Testing”, “Education”, “Other”).
Atom TH1: Wind’s Extensions sidebar filters @builtin category:themes
against this array. Without the field the filter never matches -
user reported theme extensions absent on @builtin search despite
being on disk. Scanner-passthrough surfaces the raw package.json
value; resolved NLS placeholders survive because the serde
deserialisation happens after the NLS rewrite.
DisplayName: Option<String>Human-readable display name, usually a VS Code NLS placeholder like
%displayName% that the scanner resolves against package.nls.json.
Atom TH1: sidebar row rendering falls back to name when this is
absent; having the real value populates tooltips and the
details editor.
Description: Option<String>Short prose description. Same NLS-placeholder rules as DisplayName.
Keywords: Option<Vec<String>>Extension keywords array - searched by the sidebar when the query
doesn’t match name, displayName, or description.
Repository: Option<Value>Repository info: Either a string URL or { type, url } object.
Bugs: Option<Value>Bug-tracker URL or object.
Homepage: Option<String>Homepage URL.
License: Option<String>License identifier (SPDX short code) or URL.
Icon: Option<String>Icon path relative to the extension root (for sidebar thumbnails).
AiKey: Option<String>Marketplace API key placeholder - still present in some upstream
built-in manifests. @vscode/extension-telemetry reads its
length on construction; if missing the activate throws
Cannot read properties of undefined (reading 'length').
ExtensionKind: Option<Value>Marketplace-side extension kind (["ui"], ["workspace"],
["web"]). Wind uses this to decide which host to run the
extension in. Missing → VS Code falls back to heuristics.
Capabilities: Option<Value>Capabilities descriptor - untrustedWorkspaces, virtualWorkspaces.
ExtensionDependencies: Option<Vec<String>>Dependency list - other extensions this one needs activated first.
ExtensionPack: Option<Vec<String>>Extension-pack children - extensions this one bundles by reference.
Implementations§
Source§impl ExtensionDescriptionStateDTO
impl ExtensionDescriptionStateDTO
Trait Implementations§
Source§impl Clone for ExtensionDescriptionStateDTO
impl Clone for ExtensionDescriptionStateDTO
Source§fn clone(&self) -> ExtensionDescriptionStateDTO
fn clone(&self) -> ExtensionDescriptionStateDTO
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for ExtensionDescriptionStateDTO
impl Debug for ExtensionDescriptionStateDTO
Source§impl<'de> Deserialize<'de> for ExtensionDescriptionStateDTO
impl<'de> Deserialize<'de> for ExtensionDescriptionStateDTO
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Auto Trait Implementations§
impl Freeze for ExtensionDescriptionStateDTO
impl RefUnwindSafe for ExtensionDescriptionStateDTO
impl Send for ExtensionDescriptionStateDTO
impl Sync for ExtensionDescriptionStateDTO
impl Unpin for ExtensionDescriptionStateDTO
impl UnsafeUnpin for ExtensionDescriptionStateDTO
impl UnwindSafe for ExtensionDescriptionStateDTO
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<'de, D, R> CommandArg<'de, R> for Dwhere
D: Deserialize<'de>,
R: Runtime,
impl<'de, D, R> CommandArg<'de, R> for Dwhere
D: Deserialize<'de>,
R: Runtime,
§fn from_command(command: CommandItem<'de, R>) -> Result<D, InvokeError>
fn from_command(command: CommandItem<'de, R>) -> Result<D, InvokeError>
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request§impl<L> LayerExt<L> for L
impl<L> LayerExt<L> for L
§fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
Layered].