magic-space

Crates.iomagic-space
lib.rsmagic-space
version0.1.0
sourcesrc
created_at2024-08-22 18:49:05.240474
updated_at2024-08-22 18:49:05.240474
descriptionLike anchor's InitSpace but without the dependency on anchor.
homepagehttps://github.com/kevinrodriguez-io/magic-space
repositoryhttps://github.com/kevinrodriguez-io/magic-space
max_upload_size
id1348103
size3,819
Kevin Rodríguez (kevinrodriguez-io)

documentation

https://docs.rs/magic-space

README

Magic Space

Logo Yes, It's AI generated.

Crates.io Docs.rs [License](

Derive macro for Solana program state structs that automatically calculates the space required for the struct.

Code mostly taken from @coral-xyz/anchor project, modified to work without the anchor crate.

Source:

Installation

Add the following to your Cargo.toml:

[dependencies]
magic_space = "^0.1.0"

Or cargo add:

$ cargo add magic-space

Usage

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>>,
}

If you have dynamic allocation, you can still use the max_len attribute as follows: #[max_len(0)] and avoid worrying about the vector length, that way you can apply the following pattern:

#[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,
}

License

Apache 2.0 LICENSE

Commit count: 0

cargo fmt