@@ -1623,29 +1623,31 @@ fn should_show_enum_discriminant(
1623
1623
repr. c ( ) || repr. int . is_some ( )
1624
1624
}
1625
1625
1626
- fn display_c_like_variant (
1627
- w : & mut String ,
1628
- cx : & Context < ' _ > ,
1629
- item : & clean:: Item ,
1630
- variant : & clean:: Variant ,
1626
+ fn display_c_like_variant < ' a , ' tcx > (
1627
+ cx : & ' a Context < ' tcx > ,
1628
+ item : & ' a clean:: Item ,
1629
+ variant : & ' a clean:: Variant ,
1631
1630
index : VariantIdx ,
1632
1631
should_show_enum_discriminant : bool ,
1633
1632
enum_def_id : DefId ,
1634
- ) {
1635
- let name = item. name . unwrap ( ) ;
1636
- if let Some ( ref value) = variant. discriminant {
1637
- write_str ( w, format_args ! ( "{} = {}" , name. as_str( ) , value. value( cx. tcx( ) , true ) ) ) ;
1638
- } else if should_show_enum_discriminant {
1639
- let adt_def = cx. tcx ( ) . adt_def ( enum_def_id) ;
1640
- let discr = adt_def. discriminant_for_variant ( cx. tcx ( ) , index) ;
1641
- if discr. ty . is_signed ( ) {
1642
- write_str ( w, format_args ! ( "{} = {}" , name. as_str( ) , discr. val as i128 ) ) ;
1633
+ ) -> impl fmt:: Display + ' a + Captures < ' tcx > {
1634
+ fmt:: from_fn ( move |w| {
1635
+ let name = item. name . unwrap ( ) ;
1636
+ if let Some ( ref value) = variant. discriminant {
1637
+ write ! ( w, "{} = {}" , name. as_str( ) , value. value( cx. tcx( ) , true ) ) ?;
1638
+ } else if should_show_enum_discriminant {
1639
+ let adt_def = cx. tcx ( ) . adt_def ( enum_def_id) ;
1640
+ let discr = adt_def. discriminant_for_variant ( cx. tcx ( ) , index) ;
1641
+ if discr. ty . is_signed ( ) {
1642
+ write ! ( w, "{} = {}" , name. as_str( ) , discr. val as i128 ) ?;
1643
+ } else {
1644
+ write ! ( w, "{} = {}" , name. as_str( ) , discr. val) ?;
1645
+ }
1643
1646
} else {
1644
- write_str ( w, format_args ! ( "{} = {}" , name . as_str ( ) , discr . val ) ) ;
1647
+ write ! ( w, "{name}" ) ? ;
1645
1648
}
1646
- } else {
1647
- w. push_str ( name. as_str ( ) ) ;
1648
- }
1649
+ Ok ( ( ) )
1650
+ } )
1649
1651
}
1650
1652
1651
1653
fn render_enum_fields (
@@ -1685,14 +1687,19 @@ fn render_enum_fields(
1685
1687
w. push_str ( TAB ) ;
1686
1688
match v. kind {
1687
1689
clean:: VariantItem ( ref var) => match var. kind {
1688
- clean:: VariantKind :: CLike => display_c_like_variant (
1690
+ clean:: VariantKind :: CLike => write_str (
1689
1691
w,
1690
- cx,
1691
- v,
1692
- var,
1693
- index,
1694
- should_show_enum_discriminant,
1695
- enum_def_id,
1692
+ format_args ! (
1693
+ "{}" ,
1694
+ display_c_like_variant(
1695
+ cx,
1696
+ v,
1697
+ var,
1698
+ index,
1699
+ should_show_enum_discriminant,
1700
+ enum_def_id,
1701
+ )
1702
+ ) ,
1696
1703
) ,
1697
1704
clean:: VariantKind :: Tuple ( ref s) => {
1698
1705
write_str (
@@ -1774,14 +1781,19 @@ fn item_variants(
1774
1781
if let clean:: VariantItem ( ref var) = variant. kind
1775
1782
&& let clean:: VariantKind :: CLike = var. kind
1776
1783
{
1777
- display_c_like_variant (
1784
+ write_str (
1778
1785
w,
1779
- cx,
1780
- variant,
1781
- var,
1782
- index,
1783
- should_show_enum_discriminant,
1784
- enum_def_id,
1786
+ format_args ! (
1787
+ "{}" ,
1788
+ display_c_like_variant(
1789
+ cx,
1790
+ variant,
1791
+ var,
1792
+ index,
1793
+ should_show_enum_discriminant,
1794
+ enum_def_id,
1795
+ )
1796
+ ) ,
1785
1797
) ;
1786
1798
} else {
1787
1799
w. push_str ( variant. name . unwrap ( ) . as_str ( ) ) ;
0 commit comments