Skip to main content

rustidy_ast/pat/
range.rs

1//! Range patterns
2
3// Imports
4use {
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/// `RangePattern`
14#[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}