Skip to content

Like Anchor's InitSpace but without the dependency on anchor, adjusted for non-anchor programs.

License

Notifications You must be signed in to change notification settings

kevinrodriguez-io/magic-space

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Magic Space

Logo Yes, It's AI generated.

Crates.io Docs.rs

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

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

About

Like Anchor's InitSpace but without the dependency on anchor, adjusted for non-anchor programs.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages