musli_macros/internals/
expansion.rs
1use crate::internals::tokens::Tokens;
2use crate::internals::{Mode, Only};
3
4use super::attr::{ModeIdent, ModeKind};
5use super::mode::ModePath;
6
7#[derive(Clone, Copy)]
8pub(crate) struct Expansion<'a> {
9 pub(crate) mode_ident: &'a ModeIdent,
10}
11
12impl<'a> Expansion<'a> {
13 pub(crate) fn as_mode(&'a self, tokens: &'a Tokens, only: Only) -> Mode<'a> {
14 Mode {
15 kind: Some(&self.mode_ident.kind),
16 mode_path: self.mode_path(tokens),
17 tokens,
18 only,
19 }
20 }
21
22 pub(crate) fn mode_path(&self, tokens: &'a Tokens) -> ModePath<'a> {
23 match &self.mode_ident.kind {
24 ModeKind::Custom(..) => ModePath::Ident(&self.mode_ident.ident),
25 _ => ModePath::Musli(&tokens.prefix, &self.mode_ident.ident),
26 }
27 }
28}