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_agent_servers: bool,
 28    pub provides_slash_commands: bool,
 29    pub provides_indexed_docs_providers: bool,
 30    pub provides_snippets: bool,
 31    pub provides_debug_adapters: bool,
 32}
 33
 34impl Model {
 35    pub fn provides(&self) -> BTreeSet<ExtensionProvides> {
 36        let mut provides = BTreeSet::default();
 37        if self.provides_themes {
 38            provides.insert(ExtensionProvides::Themes);
 39        }
 40
 41        if self.provides_icon_themes {
 42            provides.insert(ExtensionProvides::IconThemes);
 43        }
 44
 45        if self.provides_languages {
 46            provides.insert(ExtensionProvides::Languages);
 47        }
 48
 49        if self.provides_grammars {
 50            provides.insert(ExtensionProvides::Grammars);
 51        }
 52
 53        if self.provides_language_servers {
 54            provides.insert(ExtensionProvides::LanguageServers);
 55        }
 56
 57        if self.provides_context_servers {
 58            provides.insert(ExtensionProvides::ContextServers);
 59        }
 60
 61        if self.provides_agent_servers {
 62            provides.insert(ExtensionProvides::AgentServers);
 63        }
 64
 65        if self.provides_slash_commands {
 66            provides.insert(ExtensionProvides::SlashCommands);
 67        }
 68
 69        if self.provides_indexed_docs_providers {
 70            provides.insert(ExtensionProvides::IndexedDocsProviders);
 71        }
 72
 73        if self.provides_snippets {
 74            provides.insert(ExtensionProvides::Snippets);
 75        }
 76
 77        if self.provides_debug_adapters {
 78            provides.insert(ExtensionProvides::DebugAdapters);
 79        }
 80
 81        provides
 82    }
 83}
 84
 85#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
 86pub enum Relation {
 87    #[sea_orm(
 88        belongs_to = "super::extension::Entity",
 89        from = "Column::ExtensionId",
 90        to = "super::extension::Column::Id"
 91        on_condition = r#"super::extension::Column::LatestVersion.into_expr().eq(Column::Version.into_expr())"#
 92    )]
 93    Extension,
 94}
 95
 96impl Related<super::extension::Entity> for Entity {
 97    fn to() -> RelationDef {
 98        Relation::Extension.def()
 99    }
100}
101
102impl ActiveModelBehavior for ActiveModel {}