rustidy_ast/item/
extern_crate.rs1use {
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#[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#[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#[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}