Versioned

Derive Macro Versioned 

Source
#[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.

§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"}