@@ -33,14 +33,61 @@ CREATE TABLE users (
3333);
3434```
3535A rudimentary implementation can be generated with:
36+ ``` rust,no_run
37+ # #[cfg(not(feature = "std"))]
38+ # fn main() {}
39+ # #[cfg(feature = "std")]
40+ fn main() -> Result<(), sql_docs::error::DocError> {
41+ use sql_docs::{GenericDialect, SqlDoc};
42+ use std::{env, fs};
43+
44+ let base = env::temp_dir().join("tmp_sql_docs_example");
45+ let _ = fs::remove_dir_all(&base);
46+ fs::create_dir_all(&base)?;
47+ let example = base.join("example.sql");
48+
49+ fs::write(
50+ &example,
51+ r#"-- Table storing user accounts
52+ -- Contains all user values
53+ /* Rows generated at registration */
54+ CREATE TABLE users (
55+ /* Primary key for each user */
56+ id INTEGER PRIMARY KEY,
57+ -- The user's login name
58+ username VARCHAR(255) NOT NULL,
59+ /* User's email address */
60+ email VARCHAR(255) UNIQUE NOT NULL
61+ );"#,
62+ )?;
63+
64+ let docs = SqlDoc::from_path(&example)
65+ .collect_all_leading()
66+ .flatten_multiline_with(". ")
67+ .build::<GenericDialect>()?;
68+
69+ let users = docs.table("users", None)?;
70+ assert_eq!(users.name(), "users");
71+ assert_eq!(
72+ users.doc(),
73+ Some("Table storing user accounts. Contains all user values. Rows generated at registration")
74+ );
75+ assert_eq!(users.path(), Some(example.as_path()));
76+
77+ let _ = fs::remove_dir_all(&base);
78+ Ok(())
79+ }
80+ ```
81+
82+ Or with no ` std ` and from a ` String ` :
3683``` rust
37- #![cfg(not(feature = " std" ))]
38- use sql_docs :: {GenericDialect ,SqlDoc ,error :: DocError };
84+ # #[cfg(feature = " std" )]
85+ # fn main () {}
86+ # #[cfg(not(feature = " std" ))]
87+ fn main () -> Result <(), sql_docs :: error :: DocError > {
88+ use sql_docs :: {GenericDialect , SqlDoc };
3989
40- fn main () -> Result <(), DocError > {
41- // Temporary directory and file created for demonstration purposes
42- let example =
43- r # " -- Table storing user accounts
90+ let example = r # " -- Table storing user accounts
4491-- Contains all user values
4592/* Rows generated at registration */
4693CREATE TABLE users (
@@ -52,26 +99,20 @@ CREATE TABLE users (
5299 email VARCHAR(255) UNIQUE NOT NULL
53100);" # ;
54101
55- // Extract documentation from a single file
56- let docs = SqlDoc :: builder_from_str (& example )
57- // Capture all valid comment lines preceding the statements directly
102+ let docs = SqlDoc :: builder_from_str (example )
58103 . collect_all_leading ()
59- // Replace `\n` with a `str`
60104 . flatten_multiline_with (" . " )
61- // Finally build the `SqlDoc`
62105 . build :: <GenericDialect >()? ;
63- // Or extract recursively from a directory
64- // let docs = SqlDoc::from_dir(&base).build()?;
65106
66- // Retrieve a specific table
67107 let users = docs . table (" users" , None )? ;
68-
69- // Table name
70108 assert_eq! (users . name (), " users" );
71- // Optional table-level documentation
72- assert_eq! (users . doc (), Some (" Table storing user accounts. Contains all user values. Rows generated at registration" ));
109+ assert_eq! (
110+ users . doc (),
111+ Some (" Table storing user accounts. Contains all user values. Rows generated at registration" )
112+ );
113+
73114 Ok (())
74- }
115+ }
75116```
76117## Primary Interface (Main API)
77118
0 commit comments