pep 604: use T | U
instead of Union[T, U]
in messaging
This commit is contained in:
parent
9fa0abe85d
commit
9e80f3dfdd
|
@ -121,7 +121,7 @@ struct RustyTransparentStruct {
|
||||||
|
|
||||||
The `FromPyObject` derivation for enums generates code that tries to extract the variants in the
|
The `FromPyObject` derivation for enums generates code that tries to extract the variants in the
|
||||||
order of the fields. As soon as a variant can be extracted succesfully, that variant is returned.
|
order of the fields. As soon as a variant can be extracted succesfully, that variant is returned.
|
||||||
This makes it possible to extract Python types like `Union[str, int]`.
|
This makes it possible to extract Python union types like `str | int`.
|
||||||
|
|
||||||
The same customizations and restrictions described for struct derivations apply to enum variants,
|
The same customizations and restrictions described for struct derivations apply to enum variants,
|
||||||
i.e. a tuple variant assumes that the input is a Python tuple, and a struct variant defaults to
|
i.e. a tuple variant assumes that the input is a Python tuple, and a struct variant defaults to
|
||||||
|
@ -171,7 +171,7 @@ enum RustyEnum {
|
||||||
```
|
```
|
||||||
|
|
||||||
If the input is neither a string nor an integer, the error message will be:
|
If the input is neither a string nor an integer, the error message will be:
|
||||||
`"'<INPUT_TYPE>' cannot be converted to 'Union[str, int]'"`.
|
`"'<INPUT_TYPE>' cannot be converted to 'str | int'"`.
|
||||||
|
|
||||||
#### `#[derive(FromPyObject)]` Container Attributes
|
#### `#[derive(FromPyObject)]` Container Attributes
|
||||||
- `pyo3(transparent)`
|
- `pyo3(transparent)`
|
||||||
|
|
|
@ -69,16 +69,11 @@ impl<'a> Enum<'a> {
|
||||||
);
|
);
|
||||||
|
|
||||||
var_extracts.push(ext);
|
var_extracts.push(ext);
|
||||||
error_names.push_str(&var.err_name);
|
if i > 0 {
|
||||||
if i < self.variants.len() - 1 {
|
error_names.push_str(" | ");
|
||||||
error_names.push_str(", ");
|
|
||||||
}
|
}
|
||||||
|
error_names.push_str(&var.err_name);
|
||||||
}
|
}
|
||||||
let error_names = if self.variants.len() > 1 {
|
|
||||||
format!("Union[{}]", error_names)
|
|
||||||
} else {
|
|
||||||
error_names
|
|
||||||
};
|
|
||||||
let ty_name = self.enum_ident.to_string();
|
let ty_name = self.enum_ident.to_string();
|
||||||
quote!(
|
quote!(
|
||||||
let mut err_reasons = ::std::string::String::new();
|
let mut err_reasons = ::std::string::String::new();
|
||||||
|
|
|
@ -409,7 +409,7 @@ fn test_err_rename() {
|
||||||
assert!(f.is_err());
|
assert!(f.is_err());
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
f.unwrap_err().to_string(),
|
f.unwrap_err().to_string(),
|
||||||
"TypeError: failed to extract enum Bar (\'Union[str, uint, int]\')\n- variant A (str): \
|
"TypeError: failed to extract enum Bar (\'str | uint | int\')\n- variant A (str): \
|
||||||
\'dict\' object cannot be converted to \'PyString\'\n- variant B (uint): \'dict\' object \
|
\'dict\' object cannot be converted to \'PyString\'\n- variant B (uint): \'dict\' object \
|
||||||
cannot be interpreted as an integer\n- variant C (int): \'dict\' object cannot be \
|
cannot be interpreted as an integer\n- variant C (int): \'dict\' object cannot be \
|
||||||
interpreted as an integer\n"
|
interpreted as an integer\n"
|
||||||
|
|
Loading…
Reference in a new issue