sexprs_parser/source/
info.rs

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