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 |

## Usage

### Basic Example

```rust
use modelstruct::Model;

#[derive(Model)]
struct User {
    id: i32,
    name: String,
    email: String,
    age: Option<i32>,
    is_active: bool,
    created_at: String,
}

fn main() {
    // Generate the SQL statement
    let sql = User::create_table_sql();
    println!("{}", sql);
    
    // Get the table name
    let table_name = User::table_name();
    println!("Table name: {}", table_name);
}
```

This will generate SQL like:
```sql
CREATE TABLE IF NOT EXISTS user (
    id INTEGER,
    name TEXT,
    email TEXT,
    age INTEGER NULL,
    is_active BOOLEAN,
    created_at TEXT
);
```

### Generated Methods

When you derive `Model`, the following methods are automatically implemented:

- `create_table_sql() -> String`: Returns the complete SQL statement to create the table
- `table_name() -> String`: Returns the table name (struct name in lowercase)

## Installation

Add this to your `Cargo.toml`:

```toml
[dependencies]
modelstruct = "0.1.0"
```

## Examples

See the `examples/` directory for more usage examples.

## Limitations

- Only supports structs (not enums or unions)
- Only supports the limited set of types listed above
- Table names are automatically generated from struct names (lowercase)
- No support for custom column names or constraints yet

## License

MIT