@@ -65,7 +65,7 @@ use crate::docfs::{DocFS, ErrorStorage, PathError};
6565use crate :: doctree;
6666use crate :: fold:: DocFolder ;
6767use crate :: html:: escape:: Escape ;
68- use crate :: html:: format:: { AsyncSpace , ConstnessSpace } ;
68+ use crate :: html:: format:: { Buffer , AsyncSpace , ConstnessSpace } ;
6969use crate :: html:: format:: { GenericBounds , WhereClause , href, AbiSpace , DefaultSpace } ;
7070use crate :: html:: format:: { VisSpace , Function , UnsafetySpace , MutableSpace } ;
7171use crate :: html:: format:: fmt_impl_for_trait_page;
@@ -1185,13 +1185,13 @@ themePicker.onblur = handleThemeButtonsBlur;
11851185 SlashChecker ( s) , s)
11861186 } )
11871187 . collect:: <String >( ) ) ;
1188- let mut v = Vec :: new ( ) ;
1189- try_err ! ( layout:: render( & mut v, & cx. shared. layout,
1190- & page, & ( "" ) , & content,
1191- cx. shared. css_file_extension. is_some( ) ,
1192- & cx. shared. themes,
1193- cx. shared. generate_search_filter) , & dst ) ;
1194- cx. shared . fs . write ( & dst, & v ) ?;
1188+ let mut v = Buffer :: html ( ) ;
1189+ layout:: render ( & mut v, & cx. shared . layout ,
1190+ & page, & ( "" ) , & content,
1191+ cx. shared . css_file_extension . is_some ( ) ,
1192+ & cx. shared . themes ,
1193+ cx. shared . generate_search_filter ) ;
1194+ cx. shared . fs . write ( & dst, v . into_inner ( ) . as_bytes ( ) ) ?;
11951195 }
11961196 }
11971197
@@ -1939,14 +1939,13 @@ impl Context {
19391939 } else {
19401940 String :: new ( )
19411941 } ;
1942- let mut v = Vec :: new ( ) ;
1943- try_err ! ( layout:: render( & mut v, & self . shared. layout,
1944- & page, & sidebar, & all,
1945- self . shared. css_file_extension. is_some( ) ,
1946- & self . shared. themes,
1947- self . shared. generate_search_filter) ,
1948- & final_file) ;
1949- self . shared . fs . write ( & final_file, & v) ?;
1942+ let mut v = Buffer :: html ( ) ;
1943+ layout:: render ( & mut v, & self . shared . layout ,
1944+ & page, & sidebar, & all,
1945+ self . shared . css_file_extension . is_some ( ) ,
1946+ & self . shared . themes ,
1947+ self . shared . generate_search_filter ) ;
1948+ self . shared . fs . write ( & final_file, v. into_inner ( ) . as_bytes ( ) ) ?;
19501949
19511950 // Generating settings page.
19521951 let settings = Settings :: new ( self . shared . static_root_path . as_deref ( ) . unwrap_or ( "./" ) ,
@@ -1959,23 +1958,24 @@ impl Context {
19591958 let sidebar = "<p class='location'>Settings</p><div class='sidebar-elems'></div>" ;
19601959 themes. push ( PathBuf :: from ( "settings.css" ) ) ;
19611960 let layout = self . shared . layout . clone ( ) ;
1962- let mut v = Vec :: new ( ) ;
1963- try_err ! ( layout:: render( & mut v, & layout,
1964- & page, & sidebar, & settings,
1965- self . shared. css_file_extension. is_some( ) ,
1966- & themes,
1967- self . shared. generate_search_filter) ,
1968- & settings_file) ;
1969- self . shared . fs . write ( & settings_file, & v) ?;
1961+ let mut v = Buffer :: html ( ) ;
1962+ layout:: render (
1963+ & mut v,
1964+ & layout,
1965+ & page, & sidebar, & settings,
1966+ self . shared . css_file_extension . is_some ( ) ,
1967+ & themes,
1968+ self . shared . generate_search_filter ,
1969+ ) ;
1970+ self . shared . fs . write ( & settings_file, v. into_inner ( ) . as_bytes ( ) ) ?;
19701971
19711972 Ok ( ( ) )
19721973 }
19731974
19741975 fn render_item ( & self ,
1975- writer : & mut dyn io :: Write ,
1976+ writer : & mut Buffer ,
19761977 it : & clean:: Item ,
1977- pushname : bool )
1978- -> io:: Result < ( ) > {
1978+ pushname : bool ) {
19791979 // A little unfortunate that this is done like this, but it sure
19801980 // does make formatting *a lot* nicer.
19811981 CURRENT_DEPTH . with ( |slot| {
@@ -2027,7 +2027,7 @@ impl Context {
20272027 & Item { cx : self , item : it } ,
20282028 self . shared . css_file_extension . is_some ( ) ,
20292029 & self . shared . themes ,
2030- self . shared . generate_search_filter ) ? ;
2030+ self . shared . generate_search_filter ) ;
20312031 } else {
20322032 let mut url = self . root_path ( ) ;
20332033 if let Some ( & ( ref names, ty) ) = cache ( ) . paths . get ( & it. def_id ) {
@@ -2036,10 +2036,9 @@ impl Context {
20362036 url. push_str ( "/" ) ;
20372037 }
20382038 url. push_str ( & item_path ( ty, names. last ( ) . unwrap ( ) ) ) ;
2039- layout:: redirect ( writer, & url) ? ;
2039+ layout:: redirect ( writer, & url) ;
20402040 }
20412041 }
2042- Ok ( ( ) )
20432042 }
20442043
20452044 /// Non-parallelized version of rendering an item. This will take the input
@@ -2075,13 +2074,13 @@ impl Context {
20752074
20762075 info ! ( "Recursing into {}" , self . dst. display( ) ) ;
20772076
2078- let mut buf = Vec :: new ( ) ;
2079- self . render_item ( & mut buf, & item, false ) . unwrap ( ) ;
2077+ let mut buf = Buffer :: html ( ) ;
2078+ self . render_item ( & mut buf, & item, false ) ;
20802079 // buf will be empty if the module is stripped and there is no redirect for it
20812080 if !buf. is_empty ( ) {
20822081 self . shared . ensure_dir ( & self . dst ) ?;
20832082 let joint_dst = self . dst . join ( "index.html" ) ;
2084- scx. fs . write ( & joint_dst, buf) ?;
2083+ scx. fs . write ( & joint_dst, buf. into_inner ( ) . as_bytes ( ) ) ?;
20852084 }
20862085
20872086 let m = match item. inner {
@@ -2110,16 +2109,16 @@ impl Context {
21102109 self . dst = prev;
21112110 self . current . pop ( ) . unwrap ( ) ;
21122111 } else if item. name . is_some ( ) {
2113- let mut buf = Vec :: new ( ) ;
2114- self . render_item ( & mut buf, & item, true ) . unwrap ( ) ;
2112+ let mut buf = Buffer :: html ( ) ;
2113+ self . render_item ( & mut buf, & item, true ) ;
21152114 // buf will be empty if the item is stripped and there is no redirect for it
21162115 if !buf. is_empty ( ) {
21172116 let name = item. name . as_ref ( ) . unwrap ( ) ;
21182117 let item_type = item. type_ ( ) ;
21192118 let file_name = & item_path ( item_type, name) ;
21202119 self . shared . ensure_dir ( & self . dst ) ?;
21212120 let joint_dst = self . dst . join ( file_name) ;
2122- self . shared . fs . write ( & joint_dst, buf) ?;
2121+ self . shared . fs . write ( & joint_dst, buf. into_inner ( ) . as_bytes ( ) ) ?;
21232122
21242123 if !self . render_redirect_pages {
21252124 all. append ( full_path ( self , & item) , & item_type) ;
@@ -2129,18 +2128,18 @@ impl Context {
21292128 // URL for the page.
21302129 let redir_name = format ! ( "{}.{}.html" , name, item_type. name_space( ) ) ;
21312130 let redir_dst = self . dst . join ( redir_name) ;
2132- let mut v = Vec :: new ( ) ;
2133- try_err ! ( layout:: redirect( & mut v, file_name) , & redir_dst ) ;
2134- self . shared . fs . write ( & redir_dst, & v ) ?;
2131+ let mut v = Buffer :: html ( ) ;
2132+ layout:: redirect ( & mut v, file_name) ;
2133+ self . shared . fs . write ( & redir_dst, v . into_inner ( ) . as_bytes ( ) ) ?;
21352134 }
21362135 // If the item is a macro, redirect from the old macro URL (with !)
21372136 // to the new one (without).
21382137 if item_type == ItemType :: Macro {
21392138 let redir_name = format ! ( "{}.{}!.html" , item_type, name) ;
21402139 let redir_dst = self . dst . join ( redir_name) ;
2141- let mut v = Vec :: new ( ) ;
2142- try_err ! ( layout:: redirect( & mut v, file_name) , & redir_dst ) ;
2143- self . shared . fs . write ( & redir_dst, & v ) ?;
2140+ let mut v = Buffer :: html ( ) ;
2141+ layout:: redirect ( & mut v, file_name) ;
2142+ self . shared . fs . write ( & redir_dst, v . into_inner ( ) . as_bytes ( ) ) ?;
21442143 }
21452144 }
21462145 }
0 commit comments