@@ -13,6 +13,7 @@ use wit_bindgen_c as c;
1313use wit_bindgen_cpp as cpp;
1414use wit_bindgen_csharp as csharp;
1515use wit_bindgen_moonbit as moonbit;
16+ use wit_bindgen_markdown as markdown;
1617
1718// When the `wee_alloc` feature is enabled, use `wee_alloc` as the global
1819// allocator.
@@ -231,11 +232,12 @@ impl WitBindgen {
231232 "csharp" | "c#" => self . generate_csharp_bindings ( content, world_name) ,
232233 "go" => self . generate_go_bindings ( content, world_name) ,
233234 "moonbit" => self . generate_moonbit_bindings ( content, world_name) ,
235+ "markdown" | "md" => self . generate_markdown_bindings ( content, world_name) ,
234236 _ => {
235237 let mut error_files = HashMap :: new ( ) ;
236238 error_files. insert (
237239 "error.txt" . to_string ( ) ,
238- format ! ( "// Unsupported language: {}\n // Supported languages: rust, c, cpp, csharp, go, moonbit" , language)
240+ format ! ( "// Unsupported language: {}\n // Supported languages: rust, c, cpp, csharp, go, moonbit, markdown " , language)
239241 ) ;
240242 error_files
241243 } ,
@@ -456,6 +458,52 @@ impl WitBindgen {
456458 }
457459 }
458460
461+ /// Generate Markdown documentation using wit-bindgen-markdown library
462+ fn generate_markdown_bindings ( & self , content : & str , world_name : Option < String > ) -> HashMap < String , String > {
463+ match self . generate_markdown_with_wit_bindgen ( content, world_name. as_deref ( ) ) {
464+ Ok ( files) => files,
465+ Err ( e) => {
466+ console_error ( & format ! ( "wit-bindgen-markdown failed: {}" , e) ) ;
467+ let mut error_files = HashMap :: new ( ) ;
468+ error_files. insert (
469+ "error.txt" . to_string ( ) ,
470+ format ! ( "Markdown generation failed: {}" , e)
471+ ) ;
472+ error_files
473+ }
474+ }
475+ }
476+
477+ /// Internal implementation for generating Markdown documentation.
478+ ///
479+ /// This function performs the actual Markdown generation using the wit-bindgen-markdown library.
480+ /// It returns a `Result` containing a map of generated files, or an error if generation fails.
481+ fn generate_markdown_with_wit_bindgen ( & self , content : & str , world_name : Option < & str > ) -> Result < HashMap < String , String > , anyhow:: Error > {
482+ let inline_path = Path :: new ( "inline.wit" ) ;
483+ let mut resolve = Resolve :: default ( ) ;
484+ let package_id = resolve. push_str ( inline_path, content)
485+ . with_context ( || "Failed to parse WIT content for Markdown generation" ) ?;
486+
487+ let world_id = if let Some ( world_name) = world_name {
488+ resolve. select_world ( & [ package_id] , Some ( world_name) ) ?
489+ } else {
490+ resolve. select_world ( & [ package_id] , None ) ?
491+ } ;
492+
493+ let opts = markdown:: Opts :: default ( ) ;
494+ let mut generator = opts. build ( ) ;
495+ let mut files = Files :: default ( ) ;
496+
497+ generator. generate ( & resolve, world_id, & mut files) ?;
498+
499+ let mut result = HashMap :: new ( ) ;
500+ for ( filename, content) in files. iter ( ) {
501+ result. insert ( filename. to_string ( ) , bytes_to_latin1_string ( content) ) ;
502+ }
503+
504+ Ok ( result)
505+ }
506+
459507 /// Generate MoonBit bindings using wit-bindgen-moonbit library
460508 fn generate_moonbit_with_wit_bindgen ( & self , content : & str , world_name : Option < & str > ) -> Result < HashMap < String , String > , anyhow:: Error > {
461509 let inline_path = Path :: new ( "inline.wit" ) ;
0 commit comments