Skip to content

Commit 90df45c

Browse files
committed
Refactor nested match
1 parent d0ea7fa commit 90df45c

File tree

1 file changed

+178
-188
lines changed

1 file changed

+178
-188
lines changed

src/lib.rs

Lines changed: 178 additions & 188 deletions
Original file line numberDiff line numberDiff line change
@@ -49,56 +49,54 @@ impl UrlPattern {
4949
}
5050

5151
let init: ::urlpattern::UrlPatternInit = match input {
52-
Some(input) => match input {
53-
UrlPatternInput::String(input) => {
54-
::urlpattern::UrlPatternInit::parse_constructor_string::<regex::Regex>(
55-
input.as_str(),
56-
base_url,
57-
)
58-
.map_err(Error)?
59-
}
60-
UrlPatternInput::Init(init) => ::urlpattern::UrlPatternInit {
61-
protocol: init
62-
.get_item("protocol")?
63-
.map(|v| v.extract::<String>())
64-
.transpose()?,
65-
username: init
66-
.get_item("username")?
67-
.map(|v| v.extract::<String>())
68-
.transpose()?,
69-
password: init
70-
.get_item("password")?
71-
.map(|v| v.extract::<String>())
72-
.transpose()?,
73-
hostname: init
74-
.get_item("hostname")?
75-
.map(|v| v.extract::<String>())
76-
.transpose()?,
77-
port: init
78-
.get_item("port")?
79-
.map(|v| v.extract::<String>())
80-
.transpose()?,
81-
pathname: init
82-
.get_item("pathname")?
83-
.map(|v| v.extract::<String>())
84-
.transpose()?,
85-
search: init
86-
.get_item("search")?
87-
.map(|v| v.extract::<String>())
88-
.transpose()?,
89-
hash: init
90-
.get_item("hash")?
91-
.map(|v| v.extract::<String>())
92-
.transpose()?,
93-
base_url: init
94-
.get_item("baseURL")?
95-
.map(|v| v.extract::<String>())
96-
.transpose()?
97-
.map(|v| v.parse::<url::Url>())
98-
.transpose()
99-
.map_err(::urlpattern::Error::Url)
100-
.map_err(Error)?,
101-
},
52+
Some(UrlPatternInput::String(input)) => {
53+
::urlpattern::UrlPatternInit::parse_constructor_string::<regex::Regex>(
54+
input.as_str(),
55+
base_url,
56+
)
57+
.map_err(Error)?
58+
}
59+
Some(UrlPatternInput::Init(init)) => ::urlpattern::UrlPatternInit {
60+
protocol: init
61+
.get_item("protocol")?
62+
.map(|v| v.extract::<String>())
63+
.transpose()?,
64+
username: init
65+
.get_item("username")?
66+
.map(|v| v.extract::<String>())
67+
.transpose()?,
68+
password: init
69+
.get_item("password")?
70+
.map(|v| v.extract::<String>())
71+
.transpose()?,
72+
hostname: init
73+
.get_item("hostname")?
74+
.map(|v| v.extract::<String>())
75+
.transpose()?,
76+
port: init
77+
.get_item("port")?
78+
.map(|v| v.extract::<String>())
79+
.transpose()?,
80+
pathname: init
81+
.get_item("pathname")?
82+
.map(|v| v.extract::<String>())
83+
.transpose()?,
84+
search: init
85+
.get_item("search")?
86+
.map(|v| v.extract::<String>())
87+
.transpose()?,
88+
hash: init
89+
.get_item("hash")?
90+
.map(|v| v.extract::<String>())
91+
.transpose()?,
92+
base_url: init
93+
.get_item("baseURL")?
94+
.map(|v| v.extract::<String>())
95+
.transpose()?
96+
.map(|v| v.parse::<url::Url>())
97+
.transpose()
98+
.map_err(::urlpattern::Error::Url)
99+
.map_err(Error)?,
102100
},
103101
None => ::urlpattern::UrlPatternInit::default(),
104102
};
@@ -139,79 +137,75 @@ impl UrlPattern {
139137
let base_url = baseURL;
140138

141139
let input: ::urlpattern::UrlPatternMatchInput = match input {
142-
Some(input) => match input {
143-
UrlPatternInput::String(input) => match base_url {
144-
Some(base_url) => {
145-
let base_url = match url::Url::parse(base_url) {
140+
Some(UrlPatternInput::String(input)) => match base_url {
141+
Some(base_url) => {
142+
let base_url = match url::Url::parse(base_url) {
143+
Ok(url) => url,
144+
Err(_) => return Ok(false),
145+
};
146+
::urlpattern::UrlPatternMatchInput::Url(
147+
match url::Url::options()
148+
.base_url(Some(&base_url))
149+
.parse(input.as_ref())
150+
{
146151
Ok(url) => url,
147152
Err(_) => return Ok(false),
148-
};
149-
::urlpattern::UrlPatternMatchInput::Url(
150-
match url::Url::options()
151-
.base_url(Some(&base_url))
152-
.parse(input.as_ref())
153-
{
154-
Ok(url) => url,
155-
Err(_) => return Ok(false),
156-
},
157-
)
158-
}
159-
None => {
160-
::urlpattern::UrlPatternMatchInput::Url(match input.parse::<url::Url>() {
161-
Ok(url) => url,
162-
Err(_) => return Ok(false),
163-
})
164-
}
165-
},
166-
UrlPatternInput::Init(init) => {
167-
if base_url.is_some() {
168-
return Err(PyTypeError::new_err("cannot use dict input with baseURL"));
169-
}
170-
171-
::urlpattern::UrlPatternMatchInput::Init(::urlpattern::UrlPatternInit {
172-
protocol: init
173-
.get_item("protocol")?
174-
.map(|v| v.extract::<String>())
175-
.transpose()?,
176-
username: init
177-
.get_item("username")?
178-
.map(|v| v.extract::<String>())
179-
.transpose()?,
180-
password: init
181-
.get_item("password")?
182-
.map(|v| v.extract::<String>())
183-
.transpose()?,
184-
hostname: init
185-
.get_item("hostname")?
186-
.map(|v| v.extract::<String>())
187-
.transpose()?,
188-
port: init
189-
.get_item("port")?
190-
.map(|v| v.extract::<String>())
191-
.transpose()?,
192-
pathname: init
193-
.get_item("pathname")?
194-
.map(|v| v.extract::<String>())
195-
.transpose()?,
196-
search: init
197-
.get_item("search")?
198-
.map(|v| v.extract::<String>())
199-
.transpose()?,
200-
hash: init
201-
.get_item("hash")?
202-
.map(|v| v.extract::<String>())
203-
.transpose()?,
204-
base_url: init
205-
.get_item("baseURL")?
206-
.map(|v| v.extract::<String>())
207-
.transpose()?
208-
.map(|v| v.parse::<url::Url>())
209-
.transpose()
210-
.map_err(::urlpattern::Error::Url)
211-
.map_err(Error)?,
212-
})
153+
},
154+
)
213155
}
156+
None => ::urlpattern::UrlPatternMatchInput::Url(match input.parse::<url::Url>() {
157+
Ok(url) => url,
158+
Err(_) => return Ok(false),
159+
}),
214160
},
161+
Some(UrlPatternInput::Init(init)) => {
162+
if base_url.is_some() {
163+
return Err(PyTypeError::new_err("cannot use dict input with baseURL"));
164+
}
165+
166+
::urlpattern::UrlPatternMatchInput::Init(::urlpattern::UrlPatternInit {
167+
protocol: init
168+
.get_item("protocol")?
169+
.map(|v| v.extract::<String>())
170+
.transpose()?,
171+
username: init
172+
.get_item("username")?
173+
.map(|v| v.extract::<String>())
174+
.transpose()?,
175+
password: init
176+
.get_item("password")?
177+
.map(|v| v.extract::<String>())
178+
.transpose()?,
179+
hostname: init
180+
.get_item("hostname")?
181+
.map(|v| v.extract::<String>())
182+
.transpose()?,
183+
port: init
184+
.get_item("port")?
185+
.map(|v| v.extract::<String>())
186+
.transpose()?,
187+
pathname: init
188+
.get_item("pathname")?
189+
.map(|v| v.extract::<String>())
190+
.transpose()?,
191+
search: init
192+
.get_item("search")?
193+
.map(|v| v.extract::<String>())
194+
.transpose()?,
195+
hash: init
196+
.get_item("hash")?
197+
.map(|v| v.extract::<String>())
198+
.transpose()?,
199+
base_url: init
200+
.get_item("baseURL")?
201+
.map(|v| v.extract::<String>())
202+
.transpose()?
203+
.map(|v| v.parse::<url::Url>())
204+
.transpose()
205+
.map_err(::urlpattern::Error::Url)
206+
.map_err(Error)?,
207+
})
208+
}
215209
None => {
216210
::urlpattern::UrlPatternMatchInput::Init(::urlpattern::UrlPatternInit::default())
217211
}
@@ -230,79 +224,75 @@ impl UrlPattern {
230224

231225
let urlpattern_input: Option<UrlPatternInput> = input.map(|i| i.extract()).transpose()?;
232226
let input: ::urlpattern::UrlPatternMatchInput = match &urlpattern_input {
233-
Some(input) => match input {
234-
UrlPatternInput::String(input) => match base_url {
235-
Some(base_url) => {
236-
let base_url = match url::Url::parse(base_url.to_str()?) {
227+
Some(UrlPatternInput::String(input)) => match base_url {
228+
Some(base_url) => {
229+
let base_url = match url::Url::parse(base_url.to_str()?) {
230+
Ok(url) => url,
231+
Err(_) => return Ok(None),
232+
};
233+
::urlpattern::UrlPatternMatchInput::Url(
234+
match url::Url::options()
235+
.base_url(Some(&base_url))
236+
.parse(input.as_ref())
237+
{
237238
Ok(url) => url,
238239
Err(_) => return Ok(None),
239-
};
240-
::urlpattern::UrlPatternMatchInput::Url(
241-
match url::Url::options()
242-
.base_url(Some(&base_url))
243-
.parse(input.as_ref())
244-
{
245-
Ok(url) => url,
246-
Err(_) => return Ok(None),
247-
},
248-
)
249-
}
250-
None => {
251-
::urlpattern::UrlPatternMatchInput::Url(match input.parse::<url::Url>() {
252-
Ok(url) => url,
253-
Err(_) => return Ok(None),
254-
})
255-
}
256-
},
257-
UrlPatternInput::Init(init) => {
258-
if baseURL.is_some() {
259-
return Err(PyTypeError::new_err("cannot use dict input with baseURL"));
260-
}
261-
262-
::urlpattern::UrlPatternMatchInput::Init(::urlpattern::UrlPatternInit {
263-
protocol: init
264-
.get_item("protocol")?
265-
.map(|v| v.extract::<String>())
266-
.transpose()?,
267-
username: init
268-
.get_item("username")?
269-
.map(|v| v.extract::<String>())
270-
.transpose()?,
271-
password: init
272-
.get_item("password")?
273-
.map(|v| v.extract::<String>())
274-
.transpose()?,
275-
hostname: init
276-
.get_item("hostname")?
277-
.map(|v| v.extract::<String>())
278-
.transpose()?,
279-
port: init
280-
.get_item("port")?
281-
.map(|v| v.extract::<String>())
282-
.transpose()?,
283-
pathname: init
284-
.get_item("pathname")?
285-
.map(|v| v.extract::<String>())
286-
.transpose()?,
287-
search: init
288-
.get_item("search")?
289-
.map(|v| v.extract::<String>())
290-
.transpose()?,
291-
hash: init
292-
.get_item("hash")?
293-
.map(|v| v.extract::<String>())
294-
.transpose()?,
295-
base_url: init
296-
.get_item("baseURL")?
297-
.map(|v| v.extract::<String>())
298-
.transpose()?
299-
.map(|v| v.parse::<url::Url>())
300-
.transpose()
301-
.map_err(::urlpattern::Error::Url)
302-
.map_err(Error)?,
303-
})
240+
},
241+
)
304242
}
243+
None => ::urlpattern::UrlPatternMatchInput::Url(match input.parse::<url::Url>() {
244+
Ok(url) => url,
245+
Err(_) => return Ok(None),
246+
}),
305247
},
248+
Some(UrlPatternInput::Init(init)) => {
249+
if baseURL.is_some() {
250+
return Err(PyTypeError::new_err("cannot use dict input with baseURL"));
251+
}
252+
253+
::urlpattern::UrlPatternMatchInput::Init(::urlpattern::UrlPatternInit {
254+
protocol: init
255+
.get_item("protocol")?
256+
.map(|v| v.extract::<String>())
257+
.transpose()?,
258+
username: init
259+
.get_item("username")?
260+
.map(|v| v.extract::<String>())
261+
.transpose()?,
262+
password: init
263+
.get_item("password")?
264+
.map(|v| v.extract::<String>())
265+
.transpose()?,
266+
hostname: init
267+
.get_item("hostname")?
268+
.map(|v| v.extract::<String>())
269+
.transpose()?,
270+
port: init
271+
.get_item("port")?
272+
.map(|v| v.extract::<String>())
273+
.transpose()?,
274+
pathname: init
275+
.get_item("pathname")?
276+
.map(|v| v.extract::<String>())
277+
.transpose()?,
278+
search: init
279+
.get_item("search")?
280+
.map(|v| v.extract::<String>())
281+
.transpose()?,
282+
hash: init
283+
.get_item("hash")?
284+
.map(|v| v.extract::<String>())
285+
.transpose()?,
286+
base_url: init
287+
.get_item("baseURL")?
288+
.map(|v| v.extract::<String>())
289+
.transpose()?
290+
.map(|v| v.parse::<url::Url>())
291+
.transpose()
292+
.map_err(::urlpattern::Error::Url)
293+
.map_err(Error)?,
294+
})
295+
}
306296
None => {
307297
::urlpattern::UrlPatternMatchInput::Init(::urlpattern::UrlPatternInit::default())
308298
}

0 commit comments

Comments
 (0)