3
3
use anyhow:: { anyhow, bail} ;
4
4
use itertools:: Itertools ;
5
5
use nutype:: nutype;
6
- use std:: { convert:: Infallible , fmt:: Display , num :: NonZeroU32 , path:: PathBuf , str:: FromStr } ;
6
+ use std:: { convert:: Infallible , fmt:: Display , path:: PathBuf , str:: FromStr } ;
7
7
use tap:: Pipe as _;
8
8
9
9
use indexmap:: IndexSet ;
@@ -188,42 +188,41 @@ impl FromStr for Ref {
188
188
}
189
189
190
190
/// Number of a pull request
191
- #[ nutype_test_util:: derive( From ) ]
192
- #[ nutype( const_fn, derive( Eq , PartialEq , Display , Debug , FromStr , Copy , Clone ) ) ]
193
- pub struct PrNumber ( NonZeroU32 ) ;
191
+ #[ nutype(
192
+ validate( greater = 0 ) ,
193
+ derive( Eq , PartialEq , Display , Debug , FromStr , Copy , Clone , TryFrom )
194
+ ) ]
195
+ pub struct PrNumber ( u32 ) ;
194
196
195
197
/// Represents owner of a repository
196
198
///
197
199
/// E.g. in `helix-editor/helix/master`, this is `helix-editor`
198
- #[ nutype_test_util:: derive( From ) ]
199
200
#[ nutype(
200
201
validate( not_empty) ,
201
202
derive(
202
- Debug , Eq , PartialEq , Ord , PartialOrd , Clone , AsRef , Display , Serialize
203
+ Debug , Eq , PartialEq , Ord , PartialOrd , Clone , AsRef , Display , Serialize , TryFrom
203
204
)
204
205
) ]
205
206
pub struct RepoOwner ( String ) ;
206
207
207
208
/// Represents name of a repository
208
209
///
209
210
/// E.g. in `helix-editor/helix/master`, this is `helix`
210
- #[ nutype_test_util:: derive( From ) ]
211
211
#[ nutype(
212
212
validate( not_empty) ,
213
213
derive(
214
- Debug , Eq , PartialEq , Ord , PartialOrd , Clone , AsRef , Display , Serialize
214
+ Debug , Eq , PartialEq , Ord , PartialOrd , Clone , AsRef , Display , Serialize , TryFrom
215
215
)
216
216
) ]
217
217
pub struct RepoName ( String ) ;
218
218
219
219
/// Name of a branch in git
220
220
///
221
221
/// E.g. in `helix-editor/helix/master`, this is `master`
222
- #[ nutype_test_util:: derive( From ) ]
223
222
#[ nutype(
224
223
validate( not_empty) ,
225
224
derive(
226
- Debug , Eq , PartialEq , Ord , PartialOrd , Clone , AsRef , Display , Serialize
225
+ Debug , Eq , PartialEq , Ord , PartialOrd , Clone , AsRef , Display , Serialize , TryFrom
227
226
)
228
227
) ]
229
228
pub struct BranchName ( String ) ;
@@ -239,8 +238,10 @@ impl FromStr for BranchName {
239
238
}
240
239
241
240
/// File name of a patch
242
- #[ nutype_test_util:: derive( From ) ]
243
- #[ nutype( validate( predicate = |p| !p. as_os_str( ) . is_empty( ) ) , derive( Hash , Eq , PartialEq , Debug , AsRef , Deserialize , Clone , FromStr ) ) ]
241
+ #[ nutype(
242
+ validate( predicate = |p| !p. as_os_str( ) . is_empty( ) ) ,
243
+ derive( Hash , Eq , PartialEq , Debug , AsRef , Deserialize , Clone , FromStr )
244
+ ) ]
244
245
pub struct PatchName ( PathBuf ) ;
245
246
246
247
impl Display for PatchName {
@@ -250,10 +251,10 @@ impl Display for PatchName {
250
251
}
251
252
252
253
/// Represents a git commit hash
253
- # [ nutype_test_util:: derive( From ) ]
254
+ // #[cfg_attr(test, nutype_test_util::derive(From) )]
254
255
#[ nutype(
255
256
validate( not_empty, predicate = is_valid_commit_hash) ,
256
- derive( Debug , Eq , PartialEq , Ord , PartialOrd , Clone , AsRef )
257
+ derive( Debug , Eq , PartialEq , Ord , PartialOrd , Clone , AsRef , TryFrom )
257
258
) ]
258
259
pub struct Commit ( String ) ;
259
260
@@ -307,45 +308,45 @@ mod tests {
307
308
(
308
309
"helix-editor/helix/master @ 1a2b3c" ,
309
310
Remote {
310
- owner : "helix-editor" . into ( ) ,
311
- repo : "helix" . into ( ) ,
312
- branch : "master" . into ( ) ,
313
- commit : Some ( "1a2b3c" . into ( ) ) ,
311
+ owner : "helix-editor" . try_into ( ) . unwrap ( ) ,
312
+ repo : "helix" . try_into ( ) . unwrap ( ) ,
313
+ branch : "master" . try_into ( ) . unwrap ( ) ,
314
+ commit : Some ( "1a2b3c" . try_into ( ) . unwrap ( ) ) ,
314
315
} ,
315
316
) ,
316
317
(
317
318
"helix-editor/helix @ deadbeef" ,
318
319
Remote {
319
- owner : "helix-editor" . into ( ) ,
320
- repo : "helix" . into ( ) ,
321
- branch : Remote :: DEFAULT_BRANCH . into ( ) ,
322
- commit : Some ( "deadbeef" . into ( ) ) ,
320
+ owner : "helix-editor" . try_into ( ) . unwrap ( ) ,
321
+ repo : "helix" . try_into ( ) . unwrap ( ) ,
322
+ branch : Remote :: DEFAULT_BRANCH . try_into ( ) . unwrap ( ) ,
323
+ commit : Some ( "deadbeef" . try_into ( ) . unwrap ( ) ) ,
323
324
} ,
324
325
) ,
325
326
(
326
327
"helix-editor/helix/feat/feature-x @ abc123" ,
327
328
Remote {
328
- owner : "helix-editor" . into ( ) ,
329
- repo : "helix" . into ( ) ,
330
- branch : "feat/feature-x" . into ( ) ,
331
- commit : Some ( "abc123" . into ( ) ) ,
329
+ owner : "helix-editor" . try_into ( ) . unwrap ( ) ,
330
+ repo : "helix" . try_into ( ) . unwrap ( ) ,
331
+ branch : "feat/feature-x" . try_into ( ) . unwrap ( ) ,
332
+ commit : Some ( "abc123" . try_into ( ) . unwrap ( ) ) ,
332
333
} ,
333
334
) ,
334
335
(
335
336
"owner/repo/branch" ,
336
337
Remote {
337
- owner : "owner" . into ( ) ,
338
- repo : "repo" . into ( ) ,
339
- branch : "branch" . into ( ) ,
338
+ owner : "owner" . try_into ( ) . unwrap ( ) ,
339
+ repo : "repo" . try_into ( ) . unwrap ( ) ,
340
+ branch : "branch" . try_into ( ) . unwrap ( ) ,
340
341
commit : None ,
341
342
} ,
342
343
) ,
343
344
(
344
345
"owner/repo" ,
345
346
Remote {
346
- owner : "owner" . into ( ) ,
347
- repo : "repo" . into ( ) ,
348
- branch : Remote :: DEFAULT_BRANCH . into ( ) ,
347
+ owner : "owner" . try_into ( ) . unwrap ( ) ,
348
+ repo : "repo" . try_into ( ) . unwrap ( ) ,
349
+ branch : Remote :: DEFAULT_BRANCH . try_into ( ) . unwrap ( ) ,
349
350
commit : None ,
350
351
} ,
351
352
) ,
@@ -371,32 +372,26 @@ patches = ['remove-tab']"#;
371
372
372
373
let conf = toml:: from_str :: < Config > ( config) . unwrap ( ) ;
373
374
374
- macro_rules! pr_number {
375
- ( $num: literal) => {
376
- PrNumber :: new( const { :: std:: num:: NonZeroU32 :: new( $num) . expect( "nonzero" ) } )
377
- } ;
378
- }
379
-
380
375
pretty_assertions:: assert_eq!(
381
376
conf,
382
377
Config {
383
378
local_branch: BranchName :: try_new( "patchy" . to_string( ) ) . unwrap( ) ,
384
379
patches: indexset![ PatchName :: try_new( "remove-tab" . into( ) ) . unwrap( ) ] ,
385
380
pull_requests: vec![
386
381
PullRequest {
387
- number: pr_number! ( 10000 ) ,
382
+ number: 10000 . try_into ( ) . unwrap ( ) ,
388
383
commit: None
389
384
} ,
390
385
PullRequest {
391
- number: pr_number! ( 10000 ) ,
386
+ number: 10000 . try_into ( ) . unwrap ( ) ,
392
387
commit: None
393
388
} ,
394
389
PullRequest {
395
- number: pr_number! ( 454 ) ,
390
+ number: 454 . try_into ( ) . unwrap ( ) ,
396
391
commit: Some ( Commit :: try_new( "a1b2c3" ) . unwrap( ) )
397
392
} ,
398
393
PullRequest {
399
- number: pr_number! ( 1 ) ,
394
+ number: 1 . try_into ( ) . unwrap ( ) ,
400
395
commit: Some ( Commit :: try_new( "a1b2c3" ) . unwrap( ) )
401
396
} ,
402
397
] ,
0 commit comments