introduce tableset and impl for tables enum (#12617)

Co-authored-by: dkathiriya <lakshya-sky@users.noreply.github.com>
Co-authored-by: Matthias Seitz <matthias.seitz@outlook.de>
This commit is contained in:
Darshan Kathiriya
2024-12-03 09:07:43 -05:00
committed by GitHub
parent 61cb3dedca
commit 8f61af0136

View File

@ -98,6 +98,15 @@ pub trait TableViewer<R> {
}
}
/// General trait for defining the set of tables
/// Used to initialize database
pub trait TableSet {
/// Returns all the table names in the database.
fn table_names(&self) -> Vec<&'static str>;
/// Returns `true` if the table at the given index is a `DUPSORT` table.
fn is_dupsort(&self, idx: usize) -> bool;
}
/// Defines all the tables in the database.
#[macro_export]
macro_rules! tables {
@ -243,6 +252,18 @@ macro_rules! tables {
}
}
impl TableSet for Tables {
fn table_names(&self) -> Vec<&'static str> {
//vec![$(table_names::$name,)*]
Self::ALL.iter().map(|t| t.name()).collect()
}
fn is_dupsort(&self, idx: usize) -> bool {
let table: Self = self.table_names()[idx].parse().expect("should be valid table name");
table.is_dupsort()
}
}
// Need constants to match on in the `FromStr` implementation.
#[allow(non_upper_case_globals)]
mod table_names {