Add indexed_fields method on Model

For postgres indexes we want to know the indexed field names upfront
without an actual instance of Model

Signed-off-by: Lee Smet <lee.smet@hotmail.com>
This commit is contained in:
Lee Smet 2025-07-31 13:21:12 +02:00
parent 74a1215554
commit 87a5ae67c7
Signed by untrusted user who does not match committer: lee
GPG Key ID: 72CBFB5FDA7FE025
2 changed files with 16 additions and 0 deletions

View File

@ -123,6 +123,11 @@ pub fn model(_attr: TokenStream, item: TokenStream) -> TokenStream {
}
};
let indexed_field_names = indexed_fields
.iter()
.map(|f| f.0.to_string())
.collect::<Vec<_>>();
let model_impl = quote! {
impl heromodels_core::Model for #struct_name {
fn db_prefix() -> &'static str {
@ -137,6 +142,12 @@ pub fn model(_attr: TokenStream, item: TokenStream) -> TokenStream {
&mut self.base_data
}
fn indexed_fields() -> Vec<&'static str> {
vec![
#(#indexed_field_names),*
]
}
#db_keys_impl
}
};

View File

@ -58,6 +58,11 @@ pub trait Model:
Vec::new()
}
/// Return a list of field names which have an index applied.
fn indexed_fields() -> Vec<&'static str> {
Vec::new()
}
/// Get the unique ID for this model
fn get_id(&self) -> u32;