sexprs_parser/source/
info.rs1use 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}