

use std::{ time };
use crate::prelude::*;
use pulldown_cmark::{ html, Parser, Options };


#[gen_特征_derive(MOD特征_tool_md)]
impl 信令路由{
    async fn exec文本信令_tool_md(&self,函数名:&str, mut 参数数组:Vec<String>)-> anyhow_Result<(bool,Value,Vec<String>)>{
        let 信令路由ref = self;
        let 结果 = match 函数名{
            "md文本转HTML"=>{
                if 参数数组.len() < 1 {  return Err(anyhow_err!("md文本转HTML, 缺少参数::  <md文本>")) }  
                json!( 信令路由ref.md文本转HTML(参数数组.remove(0)).await? )
            }
            _=>{ return Ok((false, json!(""), 参数数组)); }
        };
        Ok((true, 结果, Vec::new()))
    }

    fn md文本转HTML(&self, 文本:impl AsRef<str>)-> impl 信令任务<String>{
        core发布信令任务!(self, 信令表::md文本转HTML { 文本:文本.as_ref().to_string() },  信令表::md文本转HTML_回复 => 文本 )
    }
}


#[derive(Clone, Serialize, Deserialize)]//可选特征
enum 信令表{
    md文本转HTML{ 文本:String },
    md文本转HTML_回复{ 文本:String  },

}
impl信令特征!(信令表, 执行函数);

async fn 执行函数(信令路由:信令路由,id:信令ID,单个信令:信令表)->anyhow_Result<信令表>{ 
    match 单个信令{
        信令表::md文本转HTML{ 文本 }=>{
            let res =  信令路由.pool同步任务(move ||{  md文本转HTML(文本) }).await?;
            anyhow_Ok信令!(信令表::md文本转HTML_回复 { 文本:res })
        }
        _ =>{ return Err(anyhow_err!("信令不存在")); }
    }
}





pub fn md文本转HTML(文本:impl AsRef<str>)->String{
    let md文本 = 文本.as_ref().to_string();
    let mut options = Options::empty();
    options.insert(Options::ENABLE_STRIKETHROUGH);

    let parser = Parser::new_ext(&md文本, options);
    
    let mut 输出html = String::new();
    html::push_html(&mut 输出html, parser);
    输出html
}