Skip to main content

PluginMigration

Trait PluginMigration 

Source
pub trait PluginMigration {
    // Required methods
    fn plugins(&self) -> &[&'static str];
    fn steps(&self) -> Vec<Step>;
}
Expand description

The migrations of a plugin’s plugin_config and columns_config, whose Step::at versions are the Perspective release that wrote a token rather than releases of the plugin itself.

§Example

use perspective_migrate::{Kind, Migrator, PluginMigration, Step, StepCx, Version};
use serde_json::{Map, Value, json};

struct Sparkline;

fn rename_width(
    token: &mut Map<String, Value>,
    _cx: &mut StepCx,
) -> Result<(), perspective_migrate::MigrateError> {
    if let Some(Value::Object(config)) = token.get_mut("plugin_config")
        && let Some(width) = config.remove("width")
    {
        config.insert("line_width".to_owned(), width);
    }

    Ok(())
}

impl PluginMigration for Sparkline {
    fn plugins(&self) -> &[&'static str] {
        &["Sparkline"]
    }

    fn steps(&self) -> Vec<Step> {
        vec![Step {
            at: Version::new(3, 0, 0),
            id: "sparkline.line_width",
            apply: rename_width,
        }]
    }
}

let migrated = Migrator::new()
    .with_plugin(Sparkline)
    .migrate(Kind::Viewer, None, json!({
        "version": "2.10.0",
        "plugin": "Sparkline",
        "plugin_config": {"width": 2}
    }))
    .unwrap();

assert_eq!(migrated.value["plugin_config"], json!({"line_width": 2}));

Required Methods§

Source

fn plugins(&self) -> &[&'static str]

The plugin names whose payloads this migration owns.

Source

fn steps(&self) -> Vec<Step>

The plugin-layer steps, in any order.

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§