Skip to main content

rustidy_ast/item/
extern_crate.rs

1//! Extern crate
2
3// Imports
4use {
5	crate::token,
6	rustidy_ast_util::Identifier,
7	rustidy_format::{Format, Formattable, WhitespaceFormat},
8	rustidy_parse::Parse,
9	rustidy_print::Print,
10	rustidy_util::Whitespace,
11};
12
13/// `ExternCrate`
14#[derive(PartialEq, Eq, Clone, Debug)]
15#[derive(serde::Serialize, serde::Deserialize)]
16#[derive(Parse, Formattable, Format, Print)]
17#[parse(name = "extern crate")]
18pub struct ExternCrate {
19	pub extern_:   token::Extern,
20	#[format(prefix_ws = Whitespace::SINGLE)]
21	pub crate_:    token::Crate,
22	#[format(prefix_ws = Whitespace::SINGLE)]
23	pub crate_ref: CrateRef,
24	#[format(prefix_ws = Whitespace::SINGLE)]
25	pub as_clause: Option<AsClause>,
26	#[format(prefix_ws = Whitespace::REMOVE)]
27	pub semi:      token::Semi,
28}
29
30/// `CrateRef`
31#[derive(PartialEq, Eq, Clone, Debug)]
32#[derive(serde::Serialize, serde::Deserialize)]
33#[derive(Parse, Formattable, Format, Print)]
34pub enum CrateRef {
35	Self_(token::SelfLower),
36	Ident(Identifier),
37}
38
39/// `AsClause`
40#[derive(PartialEq, Eq, Clone, Debug)]
41#[derive(serde::Serialize, serde::Deserialize)]
42#[derive(Parse, Formattable, Format, Print)]
43pub struct AsClause {
44	pub as_:  token::As,
45	#[format(prefix_ws = Whitespace::SINGLE)]
46	pub name: AsClauseName,
47}
48
49#[derive(PartialEq, Eq, Clone, Debug)]
50#[derive(serde::Serialize, serde::Deserialize)]
51#[derive(Parse, Formattable, Format, Print)]
52pub enum AsClauseName {
53	Ident(Identifier),
54	Underscore(token::Underscore),
55}