馃 The Definitive Gemini Protocol Toolkit
gemini gemini-protocol gemtext parser zero-dependency toolkit ast converter html markdown cli networking
at main 57 lines 1.2 kB view raw
1//! Convert Gemtext into many types of markup. 2 3use crate::ast::Ast; 4 5mod html; 6mod markdown; 7 8#[cfg(feature = "macros")] mod macros; 9 10/// Different targets to convert Gemtext to 11#[derive(Debug, Copy, Clone, PartialEq, Eq)] 12pub enum Target { 13 /// Convert Gemtext to HTML 14 HTML, 15 /// Convert Gemtext to Markdown 16 Markdown, 17} 18 19/// Convert AST'd Gemtext into an alternative markup format. 20/// 21/// # Example 22/// 23/// ```rust 24/// use germ::convert; 25/// 26/// let _ = convert::from_ast( 27/// &germ::ast::Ast::from_string(r#"=> gemini://gem.rest/ GemRest"#), 28/// &convert::Target::HTML, 29/// ); 30/// ``` 31#[must_use] 32pub fn from_ast(source: &Ast, target: &Target) -> String { 33 match target { 34 Target::Markdown => markdown::convert(source.inner()), 35 Target::HTML => html::convert(source.inner()), 36 } 37} 38 39/// Convert raw Gemtext into an alternative markup format. 40/// 41/// # Example 42/// 43/// ```rust 44/// use germ::convert; 45/// 46/// let _ = convert::from_string( 47/// r#"=> gemini://gem.rest/ GemRest"#, 48/// &convert::Target::HTML, 49/// ); 50/// ``` 51#[must_use] 52pub fn from_string( 53 source: &(impl ToString + ?Sized), 54 target: &Target, 55) -> String { 56 from_ast(&Ast::from_owned(&source.to_string()), target) 57}