1use {
5 crate::{expr::PathExpression, token},
6 super::LiteralPattern,
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)]
17pub enum RangePattern {
18 Exclusive(RangeExclusivePattern),
19 Inclusive(RangeInclusivePattern),
20 From(RangeFromPattern),
21 ToExclusive(RangeToExclusivePattern),
22 ToInclusive(RangeToInclusivePattern),
23 Obsolete(ObsoleteRangePattern),
24}
25
26#[derive(PartialEq, Eq, Clone, Debug)]
27#[derive(serde::Serialize, serde::Deserialize)]
28#[derive(Parse, Formattable, Format, Print)]
29pub struct RangeExclusivePattern {
30 lhs: RangePatternBound,
31 #[format(prefix_ws = Whitespace::REMOVE)]
32 dot_dot: token::DotDot,
33 #[format(prefix_ws = Whitespace::REMOVE)]
34 rhs: RangePatternBound,
35}
36
37#[derive(PartialEq, Eq, Clone, Debug)]
38#[derive(serde::Serialize, serde::Deserialize)]
39#[derive(Parse, Formattable, Format, Print)]
40pub struct RangeInclusivePattern {
41 lhs: RangePatternBound,
42 #[format(prefix_ws = Whitespace::REMOVE)]
43 dot_dot_eq: token::DotDotEq,
44 #[format(prefix_ws = Whitespace::REMOVE)]
45 rhs: RangePatternBound,
46}
47
48#[derive(PartialEq, Eq, Clone, Debug)]
49#[derive(serde::Serialize, serde::Deserialize)]
50#[derive(Parse, Formattable, Format, Print)]
51pub struct RangeFromPattern {
52 lhs: RangePatternBound,
53 #[format(prefix_ws = Whitespace::REMOVE)]
54 dot_dot: token::DotDot,
55}
56
57#[derive(PartialEq, Eq, Clone, Debug)]
58#[derive(serde::Serialize, serde::Deserialize)]
59#[derive(Parse, Formattable, Format, Print)]
60pub struct RangeToExclusivePattern {
61 dot_dot: token::DotDot,
62 #[format(prefix_ws = Whitespace::REMOVE)]
63 rhs: RangePatternBound,
64}
65
66#[derive(PartialEq, Eq, Clone, Debug)]
67#[derive(serde::Serialize, serde::Deserialize)]
68#[derive(Parse, Formattable, Format, Print)]
69pub struct RangeToInclusivePattern {
70 dot_dot_eq: token::DotDotEq,
71 #[format(prefix_ws = Whitespace::REMOVE)]
72 rhs: RangePatternBound,
73}
74
75#[derive(PartialEq, Eq, Clone, Debug)]
76#[derive(serde::Serialize, serde::Deserialize)]
77#[derive(Parse, Formattable, Format, Print)]
78pub struct ObsoleteRangePattern {
79 lhs: RangePatternBound,
80 #[format(prefix_ws = Whitespace::REMOVE)]
81 dot_dot_dot: token::DotDotDot,
82 #[format(prefix_ws = Whitespace::REMOVE)]
83 rhs: RangePatternBound,
84}
85
86#[derive(PartialEq, Eq, Clone, Debug)]
87#[derive(serde::Serialize, serde::Deserialize)]
88#[derive(Parse, Formattable, Format, Print)]
89pub enum RangePatternBound {
90 Literal(LiteralPattern),
91 Path(PathExpression),
92}