Skip to content

Commit 6576c83

Browse files
committed
feat: simplify uri
1 parent 5b67910 commit 6576c83

File tree

2 files changed

+30
-47
lines changed

2 files changed

+30
-47
lines changed

crates/git-remote-codecommit/src/main.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ fn main() -> anyhow::Result<ExitCode> {
110110
"parsed cli arguments"
111111
);
112112

113-
let parsed_uri = ParsedUri::try_from(&remote_uri).context("failed to parse uri")?;
113+
let parsed_uri = ParsedUri::new(&remote_uri).context("failed to parse uri")?;
114114
debug!(?parsed_uri, "parsed uri");
115115

116116
let sdk_context = SdkContext::load_context_sync(parsed_uri.region(), parsed_uri.profile())?;
@@ -307,7 +307,7 @@ mod tests {
307307
})
308308
.expect("failed to load context");
309309

310-
let parsed_url = ParsedUri::try_from("codecommit://my-repo").expect("valid URI");
310+
let parsed_url = ParsedUri::new("codecommit://my-repo").expect("valid URI");
311311

312312
let url = generate_url(SystemTime::UNIX_EPOCH, &parsed_url, None, &sdk_context);
313313

@@ -329,7 +329,7 @@ mod tests {
329329
})
330330
.expect("failed to load context");
331331

332-
let parsed_url = ParsedUri::try_from("codecommit://my-repo").expect("valid URI");
332+
let parsed_url = ParsedUri::new("codecommit://my-repo").expect("valid URI");
333333

334334
let url = generate_url(
335335
SystemTime::UNIX_EPOCH,
@@ -356,7 +356,7 @@ mod tests {
356356
})
357357
.expect("failed to load context");
358358

359-
let parsed_url = ParsedUri::try_from("codecommit://my-repo").expect("valid URI");
359+
let parsed_url = ParsedUri::new("codecommit://my-repo").expect("valid URI");
360360

361361
let url = generate_url(SystemTime::UNIX_EPOCH, &parsed_url, None, &sdk_context);
362362

@@ -378,7 +378,7 @@ mod tests {
378378
})
379379
.expect("failed to load context");
380380

381-
let parsed_url = ParsedUri::try_from("codecommit://my-repo").expect("valid URI");
381+
let parsed_url = ParsedUri::new("codecommit://my-repo").expect("valid URI");
382382

383383
let url = generate_url(
384384
SystemTime::UNIX_EPOCH,

crates/git-remote-codecommit/src/uri/mod.rs

Lines changed: 25 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ pub struct ParsedUri<'a> {
2626
repository: RegisteredName<'a>,
2727
}
2828

29-
impl ParsedUri<'_> {
29+
impl<'a> ParsedUri<'a> {
3030
pub fn region(&self) -> Option<&str> {
3131
self.region.as_ref().map(Scheme::as_str)
3232
}
@@ -47,20 +47,8 @@ impl ParsedUri<'_> {
4747
repository: self.repository.into_owned(),
4848
}
4949
}
50-
}
51-
52-
impl<'a> TryFrom<&'a String> for ParsedUri<'a> {
53-
type Error = ParseUriError;
54-
55-
fn try_from(value: &'a String) -> Result<Self, Self::Error> {
56-
Self::try_from(value.as_str())
57-
}
58-
}
59-
60-
impl<'a> TryFrom<&'a str> for ParsedUri<'a> {
61-
type Error = ParseUriError;
6250

63-
fn try_from(input: &'a str) -> Result<Self, Self::Error> {
51+
pub fn new(input: &'a str) -> Result<Self, ParseUriError> {
6452
// Git removes this prefix before invoking the helper; but, we're checking for
6553
// it anyways to be safe as otherwise it would be an invalid URI.
6654
let value = input.strip_prefix(PREFIX_WITH_REGION).unwrap_or(input);
@@ -136,12 +124,7 @@ trait SingleExt: IntoIterator {
136124
{
137125
let mut iter = self.into_iter();
138126
let first = iter.next()?;
139-
// note: https://doc.rust-lang.org/nightly/edition-guide/rust-2024/temporary-tail-expr-scope.html
140-
if iter.next().is_none() {
141-
Some(first)
142-
} else {
143-
None
144-
}
127+
iter.next().is_none().then_some(first)
145128
}
146129
}
147130

@@ -153,23 +136,23 @@ mod tests {
153136

154137
#[test]
155138
fn test_base_example() {
156-
let parsed_uri = ParsedUri::try_from("codecommit://my-repo").expect("valid URI");
139+
let parsed_uri = ParsedUri::new("codecommit://my-repo").expect("valid URI");
157140
assert_eq!(None, parsed_uri.region());
158141
assert_eq!(None, parsed_uri.profile());
159142
assert_eq!("my-repo", parsed_uri.repository());
160143
}
161144

162145
#[test]
163146
fn test_base_example_with_profile() {
164-
let parsed_uri = ParsedUri::try_from("codecommit://my-profile@my-repo").expect("valid URI");
147+
let parsed_uri = ParsedUri::new("codecommit://my-profile@my-repo").expect("valid URI");
165148
assert_eq!(None, parsed_uri.region());
166149
assert_eq!(Some("my-profile"), parsed_uri.profile());
167150
assert_eq!("my-repo", parsed_uri.repository());
168151
}
169152

170153
#[test]
171154
fn test_region_example() {
172-
let parsed_uri = ParsedUri::try_from("codecommit::us-east-1://my-repo").expect("valid URI");
155+
let parsed_uri = ParsedUri::new("codecommit::us-east-1://my-repo").expect("valid URI");
173156
assert_eq!(Some("us-east-1"), parsed_uri.region());
174157
assert_eq!(None, parsed_uri.profile());
175158
assert_eq!("my-repo", parsed_uri.repository());
@@ -178,23 +161,23 @@ mod tests {
178161
#[test]
179162
fn test_region_example_with_profile() {
180163
let parsed_uri =
181-
ParsedUri::try_from("codecommit::us-east-1://my-profile@my-repo").expect("valid URI");
164+
ParsedUri::new("codecommit::us-east-1://my-profile@my-repo").expect("valid URI");
182165
assert_eq!(Some("us-east-1"), parsed_uri.region());
183166
assert_eq!(Some("my-profile"), parsed_uri.profile());
184167
assert_eq!("my-repo", parsed_uri.repository());
185168
}
186169

187170
#[test]
188171
fn test_region_from_git_example() {
189-
let parsed_uri = ParsedUri::try_from("us-east-1://my-repo").expect("valid URI");
172+
let parsed_uri = ParsedUri::new("us-east-1://my-repo").expect("valid URI");
190173
assert_eq!(Some("us-east-1"), parsed_uri.region());
191174
assert_eq!(None, parsed_uri.profile());
192175
assert_eq!("my-repo", parsed_uri.repository());
193176
}
194177

195178
#[test]
196179
fn test_region_from_git_example_with_profile() {
197-
let parsed_uri = ParsedUri::try_from("us-east-1://my-profile@my-repo").expect("valid URI");
180+
let parsed_uri = ParsedUri::new("us-east-1://my-profile@my-repo").expect("valid URI");
198181
assert_eq!(Some("us-east-1"), parsed_uri.region());
199182
assert_eq!(Some("my-profile"), parsed_uri.profile());
200183
assert_eq!("my-repo", parsed_uri.repository());
@@ -203,7 +186,7 @@ mod tests {
203186
#[test]
204187
fn test_invalid_uri() {
205188
assert!(matches!(
206-
ParsedUri::try_from("codecommit::my-repo"),
189+
ParsedUri::new("codecommit::my-repo"),
207190
Err(ParseUriError::InvalidUri(_))
208191
));
209192
}
@@ -212,77 +195,77 @@ mod tests {
212195
fn test_missing_authority() {
213196
assert_eq!(
214197
Err(ParseUriError::MissingAuthority),
215-
ParsedUri::try_from("codecommit:"),
198+
ParsedUri::new("codecommit:"),
216199
);
217200
}
218201

219202
#[test]
220203
fn test_unexpected_path() {
221204
assert_eq!(
222205
Err(ParseUriError::UnexpectedPath),
223-
ParsedUri::try_from("codecommit:///my-repo"),
206+
ParsedUri::new("codecommit:///my-repo"),
224207
);
225208
}
226209

227210
#[test]
228211
fn test_unexpected_query() {
229212
assert_eq!(
230213
Err(ParseUriError::UnexpectedQuery),
231-
ParsedUri::try_from("codecommit://my-repo?query"),
214+
ParsedUri::new("codecommit://my-repo?query"),
232215
);
233216
}
234217

235218
#[test]
236219
fn test_unexpected_fragment() {
237220
assert_eq!(
238221
Err(ParseUriError::UnexpectedFragment),
239-
ParsedUri::try_from("codecommit://my-repo#fragment"),
222+
ParsedUri::new("codecommit://my-repo#fragment"),
240223
);
241224
}
242225

243226
#[test]
244227
fn test_unexpected_password() {
245228
assert_eq!(
246229
Err(ParseUriError::UnexpectedPassword),
247-
ParsedUri::try_from("codecommit://user:pass@my-repo"),
230+
ParsedUri::new("codecommit://user:pass@my-repo"),
248231
);
249232
}
250233

251234
#[test]
252235
fn test_unexpected_port() {
253236
assert_eq!(
254237
Err(ParseUriError::UnexpectedPort),
255-
ParsedUri::try_from("codecommit://my-repo:1234"),
238+
ParsedUri::new("codecommit://my-repo:1234"),
256239
);
257240
}
258241

259242
#[test]
260243
fn test_unexpected_ipv4_for_repo() {
261244
assert_eq!(
262245
Err(ParseUriError::UnexpectedIpForRepositoryName),
263-
ParsedUri::try_from("codecommit://127.0.0.1"),
246+
ParsedUri::new("codecommit://127.0.0.1"),
264247
);
265248
}
266249

267250
#[test]
268251
fn test_unexpected_ipv6_for_repo() {
269252
assert_eq!(
270253
Err(ParseUriError::UnexpectedIpForRepositoryName),
271-
ParsedUri::try_from("codecommit://[::1]"),
254+
ParsedUri::new("codecommit://[::1]"),
272255
);
273256
}
274257

275258
#[test]
276259
fn test_empty_repo_name() {
277260
assert_eq!(
278261
Err(ParseUriError::EmptyRepositoryName),
279-
ParsedUri::try_from("codecommit://"),
262+
ParsedUri::new("codecommit://"),
280263
);
281264
}
282265

283266
#[test]
284267
fn test_to_owned() {
285-
let parsed_uri = ParsedUri::try_from("codecommit://my-repo").expect("valid URI");
268+
let parsed_uri = ParsedUri::new("codecommit://my-repo").expect("valid URI");
286269
let owned = parsed_uri.into_owned();
287270
assert_eq!(None, owned.region());
288271
assert_eq!(None, owned.profile());
@@ -292,39 +275,39 @@ mod tests {
292275
#[test]
293276
fn test_try_from_owned() {
294277
let s = "codecommit://my-repo".to_owned();
295-
let parsed_uri = ParsedUri::try_from(&s).expect("valid URI");
278+
let parsed_uri = ParsedUri::new(&s).expect("valid URI");
296279
assert_eq!(None, parsed_uri.region());
297280
assert_eq!(None, parsed_uri.profile());
298281
assert_eq!("my-repo", parsed_uri.repository());
299282
}
300283

301284
#[test]
302285
fn test_to_string() {
303-
let parsed_uri = ParsedUri::try_from("codecommit://my-repo")
286+
let parsed_uri = ParsedUri::new("codecommit://my-repo")
304287
.expect("valid URI")
305288
.to_string();
306289
assert_eq!("codecommit://my-repo", parsed_uri);
307290
}
308291

309292
#[test]
310293
fn test_to_string_with_profile() {
311-
let parsed_uri = ParsedUri::try_from("codecommit://my-profile@my-repo")
294+
let parsed_uri = ParsedUri::new("codecommit://my-profile@my-repo")
312295
.expect("valid URI")
313296
.to_string();
314297
assert_eq!("codecommit://my-profile@my-repo", parsed_uri);
315298
}
316299

317300
#[test]
318301
fn test_to_string_with_region() {
319-
let parsed_uri = ParsedUri::try_from("codecommit::us-west-2://my-repo")
302+
let parsed_uri = ParsedUri::new("codecommit::us-west-2://my-repo")
320303
.expect("valid URI")
321304
.to_string();
322305
assert_eq!("codecommit::us-west-2://my-repo", parsed_uri);
323306
}
324307

325308
#[test]
326309
fn test_to_string_with_profile_and_region() {
327-
let parsed_uri = ParsedUri::try_from("codecommit::us-west-2://my-profile@my-repo")
310+
let parsed_uri = ParsedUri::new("codecommit::us-west-2://my-profile@my-repo")
328311
.expect("valid URI")
329312
.to_string();
330313
assert_eq!("codecommit::us-west-2://my-profile@my-repo", parsed_uri);

0 commit comments

Comments
 (0)