Skip to main content

rustidy_ast/item/
mod_.rs

1//! Module item
2
3// Imports
4use {
5	crate::{attr::BracedWithInnerAttributes, token},
6	super::Items,
7	rustidy_ast_util::Identifier,
8	rustidy_format::{Format, Formattable, WhitespaceFormat},
9	rustidy_parse::Parse,
10	rustidy_print::Print,
11	rustidy_util::Whitespace,
12};
13
14/// `Module`
15#[derive(PartialEq, Eq, Clone, Debug)]
16#[derive(serde::Serialize, serde::Deserialize)]
17#[derive(Parse, Formattable, Format, Print)]
18#[parse(name = "module declaration")]
19pub struct Module {
20	pub unsafe_: Option<token::Unsafe>,
21	#[format(prefix_ws(expr = Whitespace::SINGLE, if_ = self.unsafe_.is_some()))]
22	pub mod_:    token::Mod,
23	#[parse(fatal)]
24	#[format(prefix_ws = Whitespace::SINGLE)]
25	pub ident:   Identifier,
26	#[format(prefix_ws = match self.inner.is_none() {
27		true => Whitespace::REMOVE,
28		false => Whitespace::SINGLE,
29	})]
30	pub inner:   ModuleInner,
31}
32
33#[derive(PartialEq, Eq, Clone, Debug)]
34#[derive(strum::EnumIs)]
35#[derive(serde::Serialize, serde::Deserialize)]
36#[derive(Parse, Formattable, Format, Print)]
37pub enum ModuleInner {
38	None(token::Semi),
39	Def(BracedWithInnerAttributes<Items>),
40}