diff --git a/src/lib.rs b/src/lib.rs index e1a7184..7214ec4 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -75,10 +75,16 @@ fn impl_from_args_struct( None => format_ident!("{}DB", name), }; + let name_query_builder = format_ident!("{}QueryBuilder", name_db); + let db_doc = format!( "An in-memory database for storing instances of [`{}`], generated by `#[derive(VennDB)]`.", name ); + let query_doc = format!( + "A query builder for querying instances of [`{}`] in a [`{}`] database.", + name, name_db + ); quote! { #[doc=#db_doc] #vis struct #name_db { @@ -101,6 +107,11 @@ fn impl_from_args_struct( #vis fn is_empty(&self) -> bool { self.rows.is_empty() } + + /// Query the database using a query builder. + #vis fn query(&self) -> #name_query_builder { + #name_query_builder { db: self } + } } impl Default for #name_db { @@ -108,5 +119,10 @@ fn impl_from_args_struct( Self::new() } } + + #[doc=#query_doc] + #vis struct #name_query_builder<'a> { + db: &'a #name_db, + } } }