ydke_parser/
utils.rs

1/// Extracts all YDKE URLs from a string.
2/// 
3/// # Example
4/// 
5/// ```
6/// use ydke_parser::extract_urls;
7/// 
8/// let text = "some text ydke://y+iNAcvojQHL6I0B3e45ArAj3gCwI94AsCPeAFP3igNT94oDKpVlASqVZQH+iZwF/omcBf6JnAWyMswFsjLMBbIyzAWom/QBPw0aAj8NGgKQ1sMDkNbDA5DWwwNvvjEEb74xBG++MQSmBe8FeGuUAHhrlAB4a5QA2qwNA9ymHgNohdwFaIXcBWiF3AVxX24BcV9uASJImQAiSJkAIkiZAA==!66qLBcREIQUa3qACyhq/AQq2BgHbgcEDCal6BCyRgQAskYEAPoq9AP60xQP+tMUD/rTFA4iQZwWIkGcF!reIKAq3iCgKt4goCNQeDAjUHgwL83BQBnOG9AJzhvQBL8mcCS/JnAkvyZwILQsYEYHT3BGB09wRgdPcE! more text ydke:///5E1A/+RNQP/kTUDthw3ALYcNwC2HDcAtcqTBHEbUwJxG1MCbGahAWxmoQFsZqEBxvKzAUSt8ANErfADRK3wA5pXhAWaV4QFmleEBVNWbwU/DRoCPw0aAn06UgJ9OlICfTpSAm++MQRvvjEEb74xBFl7YwQ+pHEBPqRxAbsKYQQbeaMFG3mjBRt5owUsvgcELL4HBCy+BwSAqRQEgKkUBA==!9wuWArS2LAOCr/4Auk7ZBcf4TQHERCEFw09BAMAOSQL/JrsCpJorAKkafgBJJZYAMqZvAS2aUQHbI+sD!FAzrARQM6wEUDOsBvzrVAL861QC/OtUAQ77dAEO+3QD73BQBjkjfA45I3wOOSN8DhCV+AIQlfgCEJX4A!";
9/// let urls = extract_urls(text);
10/// assert_eq!(urls.len(), 2);
11/// assert!(urls[0].starts_with("ydke://"));
12/// assert!(urls[1].starts_with("ydke://"));
13/// ```
14pub fn extract_urls(text: &str) -> Vec<String> {
15    text.split_whitespace()
16        .filter(|word| word.starts_with("ydke://"))
17        .filter(|url| url.matches('!').count() >= 3)
18        .map(String::from)
19        .collect()
20}
21
22#[cfg(test)]
23mod tests {
24    use super::*;
25
26    #[test]
27    fn test_extract_urls() {
28        let text = "some text ydke://test1!test2!test3! more text ydke://test4!test5!test6!";
29        let urls = extract_urls(text);
30        assert_eq!(urls.len(), 2);
31        assert!(urls[0].starts_with("ydke://"));
32        assert!(urls[1].starts_with("ydke://"));
33    }
34}