mod markdown {
    use pulldown_cmark::Parser;
    use pulldown_cmark::Event;
    use pulldown_cmark::Tag;

    pub struct MarkdownParser<'a> {
        text: &'a String
    }

    impl<'a> MarkdownParser<'a> {

        pub fn new(s: &'a String) -> MarkdownParser {
            MarkdownParser {
                text: s
            }
        }

        pub fn links(&self) -> Vec<String> {
            Parser::new(&self.text[..])
                .filter_map(|e| {
                    match e {
                        Event::Start(t) => Some(t),
                        Event::End(t)   => Some(t),
                        _               => None
                    }
                })
                .filter_map(|tag| {
                    match tag {
                        Tag::Link(url, text) => Some((url, text)),
                        _               => None
                    }
                })
                .map(|(url, text)| {
                    text.into_owned()
                }).collect::<Vec<String>>()
        }

        pub fn codeblocks(&self) -> Vec<String> {
            Parser::new(&self.text[..])
                .filter_map(|e| {
                    match e {
                        Event::Start(t) => Some(t),
                        Event::End(t)   => Some(t),
                        _               => None
                    }
                })
                .filter_map(|tag| {
                    match tag {
                        Tag::CodeBlock(text)    => Some(text),
                        _                       => None
                    }
                })
                .map(|text| {
                    text.into_owned()
                }).collect::<Vec<String>>()
        }

    }

}


pub fn extract_links(s: &String) -> Vec<String> {
    use pulldown_cmark::Parser;
    use pulldown_cmark::Event;
    use pulldown_cmark::Tag;

    Parser::new(&s[..])
        .filter_map(|e| {
            match e {
                Event::Start(t) => Some(t),
                Event::End(t)   => Some(t),
                _               => None
            }
        })
        .filter_map(|tag| {
            match tag {
                Tag::Link(url, text) => Some((url, text)),
                _               => None
            }
        })
        .map(|(url, text)| {
            text.into_owned()
        }).collect::<Vec<String>>()
}


--- 
+++ 
@@ -1,60 +1,25 @@
-mod markdown {
+
+pub fn extract_links(s: &String) -> Vec<String> {
     use pulldown_cmark::Parser;
     use pulldown_cmark::Event;
     use pulldown_cmark::Tag;
 
-    pub struct MarkdownParser<'a> {
-        text: &'a String
-    }
+    Parser::new(&s[..])
+        .filter_map(|e| {
+            match e {
+                Event::Start(t) => Some(t),
+                Event::End(t)   => Some(t),
+                _               => None
+            }
+        })
+        .filter_map(|tag| {
+            match tag {
+                Tag::Link(url, text) => Some((url, text)),
+                _               => None
+            }
+        })
+        .map(|(url, text)| {
+            text.into_owned()
+        }).collect::<Vec<String>>()
+}
 
-    impl<'a> MarkdownParser<'a> {
-
-        pub fn new(s: &'a String) -> MarkdownParser {
-            MarkdownParser {
-                text: s
-            }
-        }
-
-        pub fn links(&self) -> Vec<String> {
-            Parser::new(&self.text[..])
-                .filter_map(|e| {
-                    match e {
-                        Event::Start(t) => Some(t),
-                        Event::End(t)   => Some(t),
-                        _               => None
-                    }
-                })
-                .filter_map(|tag| {
-                    match tag {
-                        Tag::Link(url, text) => Some((url, text)),
-                        _               => None
-                    }
-                })
-                .map(|(url, text)| {
-                    text.into_owned()
-                }).collect::<Vec<String>>()
-        }
-
-        pub fn codeblocks(&self) -> Vec<String> {
-            Parser::new(&self.text[..])
-                .filter_map(|e| {
-                    match e {
-                        Event::Start(t) => Some(t),
-                        Event::End(t)   => Some(t),
-                        _               => None
-                    }
-                })
-                .filter_map(|tag| {
-                    match tag {
-                        Tag::CodeBlock(text)    => Some(text),
-                        _                       => None
-                    }
-                })
-                .map(|text| {
-                    text.into_owned()
-                }).collect::<Vec<String>>()
-        }
-
-    }
-
-}
Rewrite markdown parsing, so we can extract links and quotes (and maybe more)
