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}