spacedrive/crates/sdk-macros/MACRO_STATUS.md
2025-12-01 13:33:00 -08:00

146 lines
3.3 KiB
Markdown

# SDK Macros - Implementation Status
**Date:** October 11, 2025
**Status:** Field Attributes Supported
---
## What Works
### `#[model]` Macro - Enhanced!
**Handles all field attributes:**
```rust
#[derive(Serialize, Deserialize, Clone)]
#[model(version = "1.0.0")]
struct Photo {
id: Uuid,
// These attributes are recognized and stripped
#[entry(filter = "*.jpg")]
file: Entry,
#[sidecar(kind = "faces", extension_owned)]
detected_faces: Vec<Face>,
#[metadata]
exif: Option<ExifData>,
#[custom_field]
place_id: Option<Uuid>,
#[user_metadata]
tags: Vec<Tag>,
#[computed]
has_faces: bool,
#[blob_data(compression = "zstd")]
embeddings: Vec<Vec<f32>>,
#[vectorized(strategy = "chunk")]
description: String,
#[sync(shared, conflict = "last_writer_wins")]
name: String,
}
```
**What the macro does:**
1. Parses and strips field attributes
2. Generates `ExtensionModel` trait impl
3. Finds `id` or `uuid` field automatically
4. Generates `MODEL_TYPE` constant
5. Compiles successfully
**Recognized attributes:**
- `#[entry]` - References file/directory
- `#[sidecar]` - Extension-owned derivative data
- `#[metadata]` - Core-extracted metadata
- `#[custom_field]` - Custom field in UserMetadata
- `#[user_metadata]` - Tags from core
- `#[computed]` - Derived field (not stored)
- `#[blob_data]` - Large data in metadata_blobs
- `#[vectorized]` - Semantic embedding
- `#[sync]` - Sync strategy
---
## Other Macros
| Macro | Status | Notes |
|-------|--------|-------|
| `#[extension]` | Working | Generates plugin_init(), job registration |
| `#[job]` | Working | FFI exports (proven in test-extension) |
| `#[model]` | Enhanced | Handles field attributes! |
| `#[agent]` | Pass-through | Needs impl block handling |
| `#[agent_memory]` | Working | Generates AgentMemory trait |
| `#[task]` | Pass-through | Needs implementation |
| `#[action]` | Pass-through | Needs implementation |
| `#[query]` | Pass-through | Needs implementation |
---
## Key Achievement
**Developers can now write models with full field attributes and they compile!**
```rust
#[derive(Serialize, Deserialize, Clone)]
#[model(version = "1.0.0")]
#[scope = "content"]
#[sync_strategy = "shared"]
struct PhotoAnalysis {
id: Uuid,
// All these attributes work!
#[sidecar(kind = "faces")]
detected_faces: Vec<Face>,
#[custom_field]
identified_people: Vec<Uuid>,
#[computed]
has_faces: bool,
}
```
**The attributes:**
- Show design intent
- Will be processed when macro is enhanced
- Don't break compilation
- Provide documentation
---
## What's Next
### For Full Compilation
Photos extension needs:
1. Convert async jobs to sync (match test-extension pattern)
2. OR: Enhance `#[job]` macro to support async
3. OR: Keep as aspirational reference
### For Full Functionality
1. **Process field attributes in macro:**
- Generate field accessors
- Generate save/load logic
- Generate sync metadata
2. **Implement agent macro:**
- Parse `#[on_event]`, `#[scheduled]`
- Generate handler registration
- Generate lifecycle hooks
3. **Implement task/action/query macros:**
- Generate FFI exports
- Handle retry/timeout
- Generate registration code
---
**The macro system now supports the design! Field attributes work.**