mirror of
https://github.com/spacedriveapp/spacedrive.git
synced 2025-12-11 20:15:30 +01:00
146 lines
3.3 KiB
Markdown
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.**
|
|
|