oom/source/
info.rs

1use std::borrow::Cow;
2
3#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Debug, Hash)]
4pub struct Source<'c> {
5    pub source: Cow<'c, str>,
6    pub filename: Option<Cow<'c, str>>,
7}
8impl<'c> Source<'c> {
9    pub fn new(source: &'c str, filename: Option<&'c str>) -> Source<'c> {
10        Source {
11            source: Cow::from(source),
12            filename: filename.map(|filename| Cow::from(filename)),
13        }
14    }
15
16    pub fn without_filename<T: std::fmt::Display>(source: T) -> Source<'c> {
17        Source {
18            source: Cow::from(source.to_string()),
19            filename: None,
20        }
21    }
22
23    pub fn filename(&self) -> Option<String> {
24        self.filename.clone().map(String::from)
25    }
26}
27
28impl<'c> From<&'c str> for Source<'c> {
29    fn from(source: &'c str) -> Source<'c> {
30        Source::without_filename(source)
31    }
32}
33
34impl<'c> From<String> for Source<'c> {
35    fn from(source: String) -> Source<'c> {
36        Source::without_filename(source)
37    }
38}