extension_version.rs

 1use crate::db::ExtensionId;
 2use collections::BTreeSet;
 3use rpc::ExtensionProvides;
 4use sea_orm::entity::prelude::*;
 5use time::PrimitiveDateTime;
 6
 7#[derive(Clone, Debug, PartialEq, Eq, DeriveEntityModel)]
 8#[sea_orm(table_name = "extension_versions")]
 9pub struct Model {
10    #[sea_orm(primary_key)]
11    pub extension_id: ExtensionId,
12    #[sea_orm(primary_key)]
13    pub version: String,
14    pub published_at: PrimitiveDateTime,
15    pub authors: String,
16    pub repository: String,
17    pub description: String,
18    pub schema_version: i32,
19    pub wasm_api_version: Option<String>,
20    pub download_count: i64,
21    pub provides_themes: bool,
22    pub provides_icon_themes: bool,
23    pub provides_languages: bool,
24    pub provides_grammars: bool,
25    pub provides_language_servers: bool,
26    pub provides_context_servers: bool,
27    pub provides_slash_commands: bool,
28    pub provides_indexed_docs_providers: bool,
29    pub provides_snippets: bool,
30    pub provides_debug_adapters: bool,
31}
32
33impl Model {
34    pub fn provides(&self) -> BTreeSet<ExtensionProvides> {
35        let mut provides = BTreeSet::default();
36        if self.provides_themes {
37            provides.insert(ExtensionProvides::Themes);
38        }
39
40        if self.provides_icon_themes {
41            provides.insert(ExtensionProvides::IconThemes);
42        }
43
44        if self.provides_languages {
45            provides.insert(ExtensionProvides::Languages);
46        }
47
48        if self.provides_grammars {
49            provides.insert(ExtensionProvides::Grammars);
50        }
51
52        if self.provides_language_servers {
53            provides.insert(ExtensionProvides::LanguageServers);
54        }
55
56        if self.provides_context_servers {
57            provides.insert(ExtensionProvides::ContextServers);
58        }
59
60        if self.provides_slash_commands {
61            provides.insert(ExtensionProvides::SlashCommands);
62        }
63
64        if self.provides_indexed_docs_providers {
65            provides.insert(ExtensionProvides::IndexedDocsProviders);
66        }
67
68        if self.provides_snippets {
69            provides.insert(ExtensionProvides::Snippets);
70        }
71
72        if self.provides_debug_adapters {
73            provides.insert(ExtensionProvides::DebugAdapters);
74        }
75
76        provides
77    }
78}
79
80#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
81pub enum Relation {
82    #[sea_orm(
83        belongs_to = "super::extension::Entity",
84        from = "Column::ExtensionId",
85        to = "super::extension::Column::Id"
86        on_condition = r#"super::extension::Column::LatestVersion.into_expr().eq(Column::Version.into_expr())"#
87    )]
88    Extension,
89}
90
91impl Related<super::extension::Entity> for Entity {
92    fn to() -> RelationDef {
93        Relation::Extension.def()
94    }
95}
96
97impl ActiveModelBehavior for ActiveModel {}