@@ -1623,29 +1623,31 @@ fn should_show_enum_discriminant(
16231623 repr. c ( ) || repr. int . is_some ( )
16241624}
16251625
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 ,
16311630 index : VariantIdx ,
16321631 should_show_enum_discriminant : bool ,
16331632 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+ }
16431646 } else {
1644- write_str ( w, format_args ! ( "{} = {}" , name . as_str ( ) , discr . val ) ) ;
1647+ write ! ( w, "{name}" ) ? ;
16451648 }
1646- } else {
1647- w. push_str ( name. as_str ( ) ) ;
1648- }
1649+ Ok ( ( ) )
1650+ } )
16491651}
16501652
16511653fn render_enum_fields (
@@ -1685,14 +1687,19 @@ fn render_enum_fields(
16851687 w. push_str ( TAB ) ;
16861688 match v. kind {
16871689 clean:: VariantItem ( ref var) => match var. kind {
1688- clean:: VariantKind :: CLike => display_c_like_variant (
1690+ clean:: VariantKind :: CLike => write_str (
16891691 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+ ) ,
16961703 ) ,
16971704 clean:: VariantKind :: Tuple ( ref s) => {
16981705 write_str (
@@ -1774,14 +1781,19 @@ fn item_variants(
17741781 if let clean:: VariantItem ( ref var) = variant. kind
17751782 && let clean:: VariantKind :: CLike = var. kind
17761783 {
1777- display_c_like_variant (
1784+ write_str (
17781785 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+ ) ,
17851797 ) ;
17861798 } else {
17871799 w. push_str ( variant. name . unwrap ( ) . as_str ( ) ) ;
0 commit comments