#space #account #solana #borsh

magic-space-derive

用于与 magic-space 一起使用的派生宏。类似于 anchor 的 InitSpace,但无需依赖 anchor。

1 个不稳定版本

0.1.0 2024年8月22日

#23 in #borsh


magic-space 中使用

MIT 许可证

12KB
156 代码行

魔法空间

Logo 是的,这是AI生成的。

Crates.io Docs.rs [License](

为 Solana 程序状态结构体提供派生宏,可以自动计算结构体所需的空间。

代码主要来自 @coral-xyz/anchor 项目,修改后无需 anchor 包即可使用。

源代码

安装

将以下内容添加到您的 Cargo.toml

[dependencies]
magic_space = "^0.1.0"

或 cargo add

$ cargo add magic-space

用法

use magic_space::*;

#[derive(MagicSpace)]
struct SomeAccount {
    apples: u32,
    oranges: u32,
    #[max_len(10)]
    others: Vec<u32>,
    #[max_len(10)]
    name: String,
    #[max_len(10, 5, 5)]
    some_other: Vec<Vec<Vec<u8>>>,
    #[max_len(10)]
    e: Vec<Option<SomeEnum>>,
}

如果您有动态分配,您仍然可以使用 max_len 属性,如下所示:#[max_len(0)] 这样就可以避免担心向量的长度,从而可以应用以下模式

#[derive(MagicSpace)]
pub struct DynamicSizeVecPattern {
    #[max_len(0)]
    pub data: Vec<Item>,
}

impl DynamicSizeVecPattern {
    pub fn size(vec_len: usize, str_len: usize) -> usize {
        Self::MAGIC_SPACE + (vec_len * Item::size(str_len))
    }
}

#[derive(MagicSpace)]
pub struct Item {
    pub data: u64,
    #[max_len(0)]
    pub name: String,
}

许可证

Apache 2.0 LICENSE

依赖项

~275–730KB
~17K SLoC