risingwave_frontend/catalog/system_catalog/rw_catalog/
rw_features.rs1use std::collections::HashSet;
16
17use risingwave_common::license::{Feature, LicenseManager};
18use risingwave_common::types::Fields;
19use risingwave_frontend_macro::system_catalog;
20
21use crate::catalog::system_catalog::SysCatalogReaderImpl;
22use crate::error::Result;
23
24#[derive(Fields)]
26struct RwFeature {
27 #[primary_key]
28 name: &'static str,
29 description: &'static str,
30 available: bool,
31}
32
33#[system_catalog(table, "rw_catalog.rw_features")]
34fn read_rw_features(_reader: &SysCatalogReaderImpl) -> Result<Vec<RwFeature>> {
35 let available_features: HashSet<_> = (LicenseManager::get().license())
36 .map(|l| l.tier.available_features().collect())
37 .unwrap_or_default();
38
39 Ok(Feature::all()
40 .iter()
41 .filter(|f| **f != Feature::TestDummy) .map(|f| RwFeature {
43 name: f.name(),
44 description: f.description(),
45 available: available_features.contains(f),
46 })
47 .collect())
48}