You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Fix directly constrained List shape with indirectly constrained aggregate type member shape (#3894)
This PR fixes a bug in the code generation for a directly constrained
List shape that has an indirectly constrained aggregate type as a member
shape.
For example, in the following model:
```smithy
@http(uri: "/sample", method: "POST")
operation SampleOp {
input := {
a: ItemList
}
errors: [ValidationException]
}
@Length(min: 1 max: 100)
list ItemList {
member: Item
}
map Item {
key: ItemName
value: ItemDescription
}
@Length(min: 0 max: 65535)
string ItemName
string ItemDescription
```
A `TryFrom` implementation is generated that converts from
`ItemListUnconstrained` to `ItemList` by converting each member of the
inner list of `ItemUnconstrained` to `ItemConstrained` and then
converting it to `Vec<Vec<ItemName>>`:
```rust
impl std::convert::TryFrom<ItemListUnconstrained> for crate::model::ItemList {
type Error = crate::model::item_list::ConstraintViolation;
fn try_from(value: ItemListUnconstrained) -> Result<Self, Self::Error> {
let res: Result<
::std::vec::Vec<
::std::collections::HashMap<crate::model::ItemName, ::std::string::String>,
>,
(usize, crate::model::item::ConstraintViolation),
> = value
.0
.into_iter()
.enumerate()
.map(|(idx, inner)| {
inner.try_into()
.map(|ic: crate::constrained::item_constrained::ItemConstrained| ic.into())
.map_err(|inner_violation| (idx, inner_violation))
})
.collect();
let inner =
res.map_err(|(idx, inner_violation)| Self::Error::Member(idx, inner_violation))?;
Self::try_from(inner)
}
}
```
Partially fixes issue: #3885 for publicly constrained shapes only.
---------
Co-authored-by: Fahad Zubair <[email protected]>
Copy file name to clipboardExpand all lines: codegen-server/src/main/kotlin/software/amazon/smithy/rust/codegen/server/smithy/generators/UnconstrainedCollectionGenerator.kt
+37Lines changed: 37 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -143,6 +143,43 @@ class UnconstrainedCollectionGenerator(
143
143
"InnerConstraintViolationSymbol" to innerConstraintViolationSymbol,
144
144
"ConstrainValueWritable" to constrainValueWritable,
0 commit comments