馃 The Definitive Gemini Protocol Toolkit
gemini
gemini-protocol
gemtext
parser
zero-dependency
toolkit
ast
converter
html
markdown
cli
networking
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}