serde_toon_format 0.1.2

Serde-compatible TOON v3.0 encoder/decoder
Documentation
use std::cell::RefCell;

use crate::arena::ArenaParts;

#[derive(Default)]
struct ArenaPool {
    parts: ArenaParts,
}

impl ArenaPool {
    fn take(&mut self) -> ArenaParts {
        std::mem::take(&mut self.parts)
    }

    fn put(&mut self, parts: ArenaParts) {
        self.parts = parts;
    }
}

thread_local! {
    static ARENA_POOL: RefCell<ArenaPool> = RefCell::new(ArenaPool::default());
}

pub fn take_arena_parts() -> ArenaParts {
    ARENA_POOL.with(|pool| pool.borrow_mut().take())
}

pub fn put_arena_parts(parts: ArenaParts) {
    ARENA_POOL.with(|pool| pool.borrow_mut().put(parts));
}