#[derive(Versioned)]
{
// Attributes available to this derive:
#[versioned]
}
Expand description
Derives the Versioned trait for a struct.
§Attributes
#[versioned(version = "x.y.z")]: Specifies the semantic version (required). The version string must be a valid semantic version.#[versioned(version_key = "...")]: Customizes the version field key (optional, default: “version”).#[versioned(data_key = "...")]: Customizes the data field key (optional, default: “data”).#[versioned(auto_tag = true)]: Auto-generates Serialize/Deserialize with version field (optional, default: false). When enabled, the version field is automatically inserted during serialization and validated during deserialization.#[versioned(queryable = true)]: Auto-generates Queryable trait implementation (optional, default: false). Enables use with ConfigMigrator for ORM-like queries.#[versioned(queryable_key = "...")]: Customizes the entity name for Queryable (optional). If not specified, uses the lowercased type name. Only used whenqueryable = true.
§Examples
Basic usage:
ⓘ
use version_migrate::Versioned;
#[derive(Versioned)]
#[versioned(version = "1.0.0")]
pub struct Task_V1_0_0 {
pub id: String,
pub title: String,
}Custom keys:
ⓘ
#[derive(Versioned)]
#[versioned(
version = "1.0.0",
version_key = "schema_version",
data_key = "payload"
)]
pub struct Task { ... }
// When used with Migrator:
// Serializes to: {"schema_version":"1.0.0","payload":{...}}Auto-tag for direct serialization:
ⓘ
#[derive(Versioned)]
#[versioned(version = "1.0.0", auto_tag = true)]
pub struct Task {
pub id: String,
pub title: String,
}
// Use serde directly without Migrator
let task = Task { id: "1".into(), title: "Test".into() };
let json = serde_json::to_string(&task)?;
// → {"version":"1.0.0","id":"1","title":"Test"}Queryable for ConfigMigrator:
ⓘ
#[derive(Serialize, Deserialize, Versioned)]
#[versioned(version = "2.0.0", queryable = true, queryable_key = "task")]
pub struct TaskEntity {
pub id: String,
pub title: String,
pub description: Option<String>,
}
// Now TaskEntity implements Queryable automatically
let tasks: Vec<TaskEntity> = config_migrator.query("tasks")?;