modelstruct 0.1.0

A Rust crate that provides a derive macro Model to automatically generate SQL CREATE TABLE IF NOT EXISTS statements from struct definitions.
Documentation
//! # ModelStruct
//! 
//! A Rust crate that provides a derive macro `Model` to automatically generate SQL `CREATE TABLE IF NOT EXISTS` statements from struct definitions.
//! 
//! ## Features
//! 
//! - **Automatic SQL Generation**: Derive the `Model` trait to generate SQL table creation statements
//! - **Type Safety**: Only supports a limited set of Rust types that can be safely mapped to SQL types
//! - **Nullable Support**: Handles `Option<T>` types as nullable columns
//! - **Simple API**: Just derive `Model` and call `create_table_sql()` or `table_name()`
//! 
//! ## Supported Types
//! 
//! | Rust Type | SQL Type | Notes |
//! |-----------|----------|-------|
//! | `i8`, `i16`, `i32` | `INTEGER` | 32-bit integers |
//! | `i64` | `BIGINT` | 64-bit integers |
//! | `u8`, `u16`, `u32` | `INTEGER` | Unsigned integers |
//! | `u64` | `BIGINT` | Unsigned 64-bit integers |
//! | `f32`, `f64` | `REAL` | Floating point numbers |
//! | `bool` | `BOOLEAN` | Boolean values |
//! | `String` | `TEXT` | String values |
//! | `str` | `TEXT` | String slices |
//! | `Option<T>` | `T NULL` | Nullable columns |
//! 
//! ## Example
//! 
//! ```rust
//! use modelstruct::Model;
//! 
//! #[derive(Model)]
//! struct User {
//!     id: i32,
//!     name: String,
//!     email: Option<String>,
//!     age: Option<i32>,
//!     is_active: bool,
//! }
//! 
//! fn main() {
//!     let sql = User::create_table_sql();
//!     println!("{}", sql);
//!     // Output:
//!     // CREATE TABLE IF NOT EXISTS user (
//!     //     id INTEGER,
//!     //     name TEXT,
//!     //     email TEXT NULL,
//!     //     age INTEGER NULL,
//!     //     is_active BOOLEAN
//!     // );
//! }
//! ```

// Re-export the Model trait
pub use model::Model;

// Re-export the derive macro from the separate crate
pub use modelstruct_derive::*;

// Module containing the Model trait
mod model {
    /// Trait that provides SQL table creation functionality
    pub trait Model {
        /// Returns the SQL statement to create the table if it doesn't exist
        fn create_table_sql() -> String;
        
        /// Returns the table name (defaults to the struct name in lowercase)
        fn table_name() -> String {
            std::any::type_name::<Self>()
                .split("::")
                .last()
                .unwrap_or("unknown")
                .to_lowercase()
        }
    }
}