tree-type 0.1.0

Rust macros for creating type-safe filesystem tree structures
Documentation
# Migration Guide: Dynamic ID Method Signatures

## Breaking Change in v0.2.1

Dynamic ID method signatures have been changed from consuming parameters to borrowing parameters for better ergonomics.

### What Changed

**Before (v0.2.0 and earlier):**
```rust
pub fn id(&self, id: impl Into<String>) -> TaskDir
```

**After (v0.2.1+):**
```rust
pub fn id(&self, id: &str) -> TaskDir
```

### Migration Steps

#### 1. Remove `.to_string()` calls

**Before:**
```rust
let task = root.tasks().id("task-1".to_string());
let project = root.projects().project("my-project".to_string());
```

**After:**
```rust
let task = root.tasks().id("task-1");
let project = root.projects().project("my-project");
```

#### 2. Use references for String variables

**Before:**
```rust
let task_name = String::from("task-1");
let task = root.tasks().id(task_name); // Consumed task_name
```

**After:**
```rust
let task_name = String::from("task-1");
let task = root.tasks().id(&task_name); // Borrows task_name
// task_name is still available for reuse
```

#### 3. String literals work directly

**Before:**
```rust
let task = root.tasks().id("task-1"); // Already worked
```

**After:**
```rust
let task = root.tasks().id("task-1"); // Still works, no change needed
```

### Benefits

1. **No parameter consumption**: Variables can be reused without cloning
2. **Cleaner syntax**: No need for `.to_string()` calls
3. **Better performance**: Avoids unnecessary string allocations
4. **More intuitive**: Matches standard Rust patterns for string parameters

### Compiler Errors

If you see errors like:
```
error[E0308]: mismatched types
expected `&str`, found `String`
```

Simply change:
```rust
// From this:
.id(variable.to_string())

// To this:
.id(&variable)
```

Or for string literals:
```rust
// From this:
.id("name".to_string())

// To this:
.id("name")
```

### Supported ID Types

The new signatures support type-specific references:
- `String``&str`
- `u32``&u32`
- `u64``&u64`
- `i32``&i32`
- `i64``&i64`

All other types fall back to `&str` and use `.to_string()` internally.