l使用 versioned 管理版本

类似于 Url,versioned 是一个方便的库,用于提供显式的版本管理。开发者可以使用原始版本号(例如 u64),但 versioned 更加明确且具有自我文档功能。versioned 可用于管理对象的版本、应用程序的数据或基本上任何其他内容。Versioned 是一个实际对象,可以转移到账户中或保存在另一个对象内部(通过包装或动态字段)。Versioned 还可以在其内部存储实际值,而不是将值作为一个单独的对象存储,这是一个更常见的用例。

要创建一个新的 Versioned 对象,可以使用 create 函数。初始版本和值是必需的。该值必须是一个 store 类型。

let v = versioned::create(1, b"hello", &mut ctx);

要获取内部类型的当前版本,请使用 version 函数。

let ver = versioned::version(&v);

要基于当前版本加载内部值,请使用 load_value 函数。调用者需要指定一个预期的类型 T。如果类型不匹配,加载将失败。

let val = versioned::load_value(&v);

要取出内部对象进行升级,请使用 remove_value_for_upgrade 函数。为了确保我们总是正确升级,会返回一个能力对象,必须在升级时使用。

let (val, cap) = versioned::remove_value_for_upgrade(&mut v);

要使用新版本和新值升级内部对象,请使用 upgrade 函数。必须使用调用 remove_value_for_upgrade 时返回的能力对象。

versioned::upgrade(&mut v, 2, b"world", cap);

要销毁这个 Versioned 容器并返回内部对象,请使用 destroy 函数。

let val = versioned::destroy(v);