# rscx-mdx
Render Markdown into HTML, while having custom
[RSCx](https://github.com/Pitasi/rscx) components inside.
## Usage
```rust
use rscx::{component, html, props};
use rscx_mdx::mdx::{Mdx, MdxComponentProps, MdxProps};
#[tokio::main]
async fn main() {
let source = r#"---
title: "Hello, world!"
---
# Hello, world!
This is a **markdown** file with some *content*, but also custom RSCx components!
## subtitle
"#;
let res = html! {
};
println!("{}", res);
// output ->
//
//
Hello, world!
// This is a markdown file with some content, but also custom RSCx components!
// Some custom title!
//
//
subtitle
//
}
/// handle is called everytime a custom component is encountered.
/// The props are standardized in the MdxComponentProps struct and can be later parsed and used
/// to render the component.
async fn handle(name: String, props: MdxComponentProps) -> String {
match name.as_str() {
"CustomTitle" => html! {
},
"Layout" => html! {
{props.children}
},
_ => String::new(),
}
}
// below we define some custom components that can be used in the markdown file
#[component]
fn CustomTitle() -> String {
html! {
Some custom title!
}
}
#[props]
pub struct LayoutProps {
children: String,
}
#[component]
fn Layout(props: LayoutProps) -> String {
html! {
{props.children}
}
}
```