mirror of
				https://github.com/samber/lo.git
				synced 2025-10-31 19:43:08 +08:00 
			
		
		
		
	Fix Must to receives 'err any' #99
This commit is contained in:
		
							
								
								
									
										63
									
								
								errors.go
									
									
									
									
									
								
							
							
						
						
									
										63
									
								
								errors.go
									
									
									
									
									
								
							| @@ -1,69 +1,62 @@ | |||||||
| package lo | package lo | ||||||
|  |  | ||||||
| // Must is a helper that wraps a call to a function returning a value and an error | // must panics if err is error or false. | ||||||
| // and panics if the error is non-nil. | func must(err any) { | ||||||
| func Must[T any](val T, err error) T { | 	b, isBool := err.(bool) | ||||||
| 	if err != nil { | 	if isBool && !b { | ||||||
| 		panic(err) | 		panic("not ok") | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	e, isError := err.(error) | ||||||
|  | 	if isError { | ||||||
|  | 		panic(e) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Must is a helper that wraps a call to a function returning a value and an error | ||||||
|  | // and panics if err is error or false. | ||||||
|  | func Must[T any](val T, err any) T { | ||||||
|  | 	must(err) | ||||||
| 	return val | 	return val | ||||||
| } | } | ||||||
|  |  | ||||||
| // Must0 has the same behavior than Must, but callback returns no variable. | // Must0 has the same behavior than Must, but callback returns no variable. | ||||||
| func Must0(err error) { | func Must0(err any) { | ||||||
| 	if err != nil { | 	must(err) | ||||||
| 		panic(err) |  | ||||||
| 	} |  | ||||||
| } | } | ||||||
|  |  | ||||||
| // Must1 is an alias to Must | // Must1 is an alias to Must | ||||||
| func Must1[T any](val T, err error) T { | func Must1[T any](val T, err any) T { | ||||||
| 	return Must(val, err) | 	return Must(val, err) | ||||||
| } | } | ||||||
|  |  | ||||||
| // Must2 has the same behavior than Must, but callback returns 2 variable2. | // Must2 has the same behavior than Must, but callback returns 2 variable2. | ||||||
| func Must2[T1 any, T2 any](val1 T1, val2 T2, err error) (T1, T2) { | func Must2[T1 any, T2 any](val1 T1, val2 T2, err any) (T1, T2) { | ||||||
| 	if err != nil { | 	must(err) | ||||||
| 		panic(err) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return val1, val2 | 	return val1, val2 | ||||||
| } | } | ||||||
|  |  | ||||||
| // Must3 has the same behavior than Must, but callback returns 2 variable2. | // Must3 has the same behavior than Must, but callback returns 2 variable2. | ||||||
| func Must3[T1 any, T2 any, T3 any](val1 T1, val2 T2, val3 T3, err error) (T1, T2, T3) { | func Must3[T1 any, T2 any, T3 any](val1 T1, val2 T2, val3 T3, err any) (T1, T2, T3) { | ||||||
| 	if err != nil { | 	must(err) | ||||||
| 		panic(err) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return val1, val2, val3 | 	return val1, val2, val3 | ||||||
| } | } | ||||||
|  |  | ||||||
| // Must4 has the same behavior than Must, but callback returns 2 variable2. | // Must4 has the same behavior than Must, but callback returns 2 variable2. | ||||||
| func Must4[T1 any, T2 any, T3 any, T4 any](val1 T1, val2 T2, val3 T3, val4 T4, err error) (T1, T2, T3, T4) { | func Must4[T1 any, T2 any, T3 any, T4 any](val1 T1, val2 T2, val3 T3, val4 T4, err any) (T1, T2, T3, T4) { | ||||||
| 	if err != nil { | 	must(err) | ||||||
| 		panic(err) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return val1, val2, val3, val4 | 	return val1, val2, val3, val4 | ||||||
| } | } | ||||||
|  |  | ||||||
| // Must5 has the same behavior than Must, but callback returns 2 variable2. | // Must5 has the same behavior than Must, but callback returns 2 variable2. | ||||||
| func Must5[T1 any, T2 any, T3 any, T4 any, T5 any](val1 T1, val2 T2, val3 T3, val4 T4, val5 T5, err error) (T1, T2, T3, T4, T5) { | func Must5[T1 any, T2 any, T3 any, T4 any, T5 any](val1 T1, val2 T2, val3 T3, val4 T4, val5 T5, err any) (T1, T2, T3, T4, T5) { | ||||||
| 	if err != nil { | 	must(err) | ||||||
| 		panic(err) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return val1, val2, val3, val4, val5 | 	return val1, val2, val3, val4, val5 | ||||||
| } | } | ||||||
|  |  | ||||||
| // Must6 has the same behavior than Must, but callback returns 2 variable2. | // Must6 has the same behavior than Must, but callback returns 2 variable2. | ||||||
| func Must6[T1 any, T2 any, T3 any, T4 any, T5 any, T6 any](val1 T1, val2 T2, val3 T3, val4 T4, val5 T5, val6 T6, err error) (T1, T2, T3, T4, T5, T6) { | func Must6[T1 any, T2 any, T3 any, T4 any, T5 any, T6 any](val1 T1, val2 T2, val3 T3, val4 T4, val5 T5, val6 T6, err any) (T1, T2, T3, T4, T5, T6) { | ||||||
| 	if err != nil { | 	must(err) | ||||||
| 		panic(err) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return val1, val2, val3, val4, val5, val6 | 	return val1, val2, val3, val4, val5, val6 | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -14,6 +14,11 @@ func TestMust(t *testing.T) { | |||||||
| 	is.Panics(func() { | 	is.Panics(func() { | ||||||
| 		Must("", errors.New("something went wrong")) | 		Must("", errors.New("something went wrong")) | ||||||
| 	}) | 	}) | ||||||
|  |  | ||||||
|  | 	is.Equal(1, Must(1, true)) | ||||||
|  | 	is.Panics(func() { | ||||||
|  | 		Must(1, false) | ||||||
|  | 	}) | ||||||
| } | } | ||||||
|  |  | ||||||
| func TestMustX(t *testing.T) { | func TestMustX(t *testing.T) { | ||||||
| @@ -108,6 +113,78 @@ func TestMustX(t *testing.T) { | |||||||
| 			Must6(1, 2, 3, 4, 5, 6, nil) | 			Must6(1, 2, 3, 4, 5, 6, nil) | ||||||
| 		}) | 		}) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	{ | ||||||
|  | 		is.Panics(func() { | ||||||
|  | 			Must0(false) | ||||||
|  | 		}) | ||||||
|  | 		is.NotPanics(func() { | ||||||
|  | 			Must0(true) | ||||||
|  | 		}) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	{ | ||||||
|  | 		val1 := Must1(1, true) | ||||||
|  | 		is.Equal(1, val1) | ||||||
|  | 		is.Panics(func() { | ||||||
|  | 			Must1(1, false) | ||||||
|  | 		}) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	{ | ||||||
|  | 		val1, val2 := Must2(1, 2, true) | ||||||
|  | 		is.Equal(1, val1) | ||||||
|  | 		is.Equal(2, val2) | ||||||
|  | 		is.Panics(func() { | ||||||
|  | 			Must2(1, 2, false) | ||||||
|  | 		}) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	{ | ||||||
|  | 		val1, val2, val3 := Must3(1, 2, 3, true) | ||||||
|  | 		is.Equal(1, val1) | ||||||
|  | 		is.Equal(2, val2) | ||||||
|  | 		is.Equal(3, val3) | ||||||
|  | 		is.Panics(func() { | ||||||
|  | 			Must3(1, 2, 3, false) | ||||||
|  | 		}) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	{ | ||||||
|  | 		val1, val2, val3, val4 := Must4(1, 2, 3, 4, true) | ||||||
|  | 		is.Equal(1, val1) | ||||||
|  | 		is.Equal(2, val2) | ||||||
|  | 		is.Equal(3, val3) | ||||||
|  | 		is.Equal(4, val4) | ||||||
|  | 		is.Panics(func() { | ||||||
|  | 			Must4(1, 2, 3, 4, false) | ||||||
|  | 		}) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	{ | ||||||
|  | 		val1, val2, val3, val4, val5 := Must5(1, 2, 3, 4, 5, true) | ||||||
|  | 		is.Equal(1, val1) | ||||||
|  | 		is.Equal(2, val2) | ||||||
|  | 		is.Equal(3, val3) | ||||||
|  | 		is.Equal(4, val4) | ||||||
|  | 		is.Equal(5, val5) | ||||||
|  | 		is.Panics(func() { | ||||||
|  | 			Must5(1, 2, 3, 4, 5, false) | ||||||
|  | 		}) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	{ | ||||||
|  | 		val1, val2, val3, val4, val5, val6 := Must6(1, 2, 3, 4, 5, 6, true) | ||||||
|  | 		is.Equal(1, val1) | ||||||
|  | 		is.Equal(2, val2) | ||||||
|  | 		is.Equal(3, val3) | ||||||
|  | 		is.Equal(4, val4) | ||||||
|  | 		is.Equal(5, val5) | ||||||
|  | 		is.Equal(6, val6) | ||||||
|  | 		is.Panics(func() { | ||||||
|  | 			Must6(1, 2, 3, 4, 5, 6, false) | ||||||
|  | 		}) | ||||||
|  | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| func TestTry(t *testing.T) { | func TestTry(t *testing.T) { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 wirekang
					wirekang