@@ -21,9 +21,9 @@ pub struct SqlDoc {
2121
2222/// Builder structure for the [`SqlDoc`]
2323#[ derive( Debug , Eq , PartialEq ) ]
24- pub struct SqlDocBuilder {
24+ pub struct SqlDocBuilder < ' a > {
2525 /// The source for implementing the [`SqlDoc`] to be built
26- source : SqlFileDocSource ,
26+ source : SqlFileDocSource < ' a > ,
2727 /// The list of Paths to be ignored for parsing purposes.
2828 deny : Vec < String > ,
2929 /// Used to indicate maintaining the `[(PathBuf, SqlFileDoc)]`
@@ -45,9 +45,10 @@ pub enum MultiFlatten {
4545
4646/// Enum for specifying a file doc source as a `directory` or a specific `file`
4747#[ derive( Debug , Eq , PartialEq ) ]
48- enum SqlFileDocSource {
48+ enum SqlFileDocSource < ' a > {
4949 Dir ( PathBuf ) ,
5050 File ( PathBuf ) ,
51+ FromString ( & ' a str ) ,
5152}
5253
5354impl SqlDoc {
@@ -57,7 +58,7 @@ impl SqlDoc {
5758 Self { tables, files }
5859 }
5960 /// Method for generating builder from a directory.
60- pub fn from_dir < P : AsRef < Path > > ( root : P ) -> SqlDocBuilder {
61+ pub fn from_dir < P : AsRef < Path > + ? Sized > ( root : & P ) -> SqlDocBuilder < ' _ > {
6162 SqlDocBuilder {
6263 source : SqlFileDocSource :: Dir ( root. as_ref ( ) . to_path_buf ( ) ) ,
6364 deny : Vec :: new ( ) ,
@@ -66,7 +67,7 @@ impl SqlDoc {
6667 }
6768 }
6869 /// Method for generating builder from a [`Path`] of a single file
69- pub fn from_path < P : AsRef < Path > > ( path : P ) -> SqlDocBuilder {
70+ pub fn from_path < P : AsRef < Path > + ? Sized > ( path : & P ) -> SqlDocBuilder < ' _ > {
7071 SqlDocBuilder {
7172 source : SqlFileDocSource :: File ( path. as_ref ( ) . to_path_buf ( ) ) ,
7273 deny : Vec :: new ( ) ,
@@ -144,7 +145,7 @@ impl SqlDoc {
144145 }
145146}
146147
147- impl SqlDocBuilder {
148+ impl SqlDocBuilder < ' _ > {
148149 /// Method for adding an item to the deny list
149150 ///
150151 /// # Parameters
@@ -181,7 +182,6 @@ impl SqlDocBuilder {
181182 self . multiline_flat = MultiFlatten :: NoFlat ;
182183 self
183184 }
184-
185185 /// Builds the [`SqlDoc`]
186186 ///
187187 /// # Errors
@@ -193,18 +193,20 @@ impl SqlDocBuilder {
193193 let gen_files = generate_docs_from_file ( file) ?;
194194 let ( path, sql_doc) = gen_files;
195195 vec ! [ ( path, sql_doc) ]
196- }
196+ } ,
197+ SqlFileDocSource :: FromString ( content) => { todo ! ( ) }
197198 } ;
198- let mut tables = Vec :: new ( ) ;
199+ let num_of_tables = docs. iter ( ) . map ( |( _, s) | s. number_of_tables ( ) ) . sum ( ) ;
200+ let mut tables = Vec :: with_capacity ( num_of_tables) ;
199201 let mut sql_doc = if self . retain_files {
200202 let files = docs;
201203 for ( _, sql_doc) in & files {
202- tables. extend ( sql_doc. tables ( ) . iter ( ) . cloned ( ) ) ;
204+ tables. extend ( sql_doc. clone ( ) ) ;
203205 }
204206 SqlDoc { tables, files : Some ( files) }
205207 } else {
206- for ( _, sql_doc) in & docs {
207- tables. extend ( sql_doc. tables ( ) . iter ( ) . cloned ( ) ) ;
208+ for ( _, sql_doc) in docs {
209+ tables. extend ( sql_doc) ;
208210 }
209211 SqlDoc { tables, files : None }
210212 } ;
0 commit comments