macro_rules! intern {
($( #[$meta:meta] )*
$vis:vis struct $struct_name:ident {
$($name:ident : $symbol:literal),+ $(,)?
}) => { ... };
($ctx: ident => {$($name:ident : $symbol:literal),+ $(,)?}) => { ... };
}Expand description
Creates a struct that holds interned symbols.
ยงExample
use tulisp::{TulispContext, intern};
intern!{
#[derive(Clone)]
pub(crate) struct Keywords {
name: ":name",
scale: ":scale",
pos: ":pos",
}
}
let ctx = &mut TulispContext::new();
let kw = Keywords::new(ctx);
assert!(kw.name.eq(&ctx.intern(":name")));
assert!(kw.scale.eq(&ctx.intern(":scale")));
assert!(kw.pos.eq(&ctx.intern(":pos")));It can also be used to create an instance of the struct directly:
use tulisp::{TulispContext, intern};
let ctx = &mut TulispContext::new();
let kw = intern!(ctx => {
name: ":name",
scale: ":scale",
pos: ":pos",
});
assert!(kw.name.eq(&ctx.intern(":name")));
assert!(kw.scale.eq(&ctx.intern(":scale")));
assert!(kw.pos.eq(&ctx.intern(":pos")));