pub const DEFAULT_NAME: &str = "<unknown>";
#[derive(Debug, PartialEq, Eq, Clone, Copy)]
pub enum SourceKind {
Definition,
Script,
}
#[derive(Debug, PartialEq, Eq, Clone)]
pub struct Source {
pub kind: SourceKind,
pub origin: Option<String>,
pub content: String,
}
impl Source {
pub fn new<O: Into<String>, C: Into<String>>(
kind: SourceKind,
origin: O,
content: C,
) -> Source {
Source {
kind,
origin: Some(origin.into()),
content: content.into(),
}
}
pub fn inline<C: Into<String>>(kind: SourceKind, content: C) -> Source {
Source {
kind,
origin: None,
content: content.into(),
}
}
pub fn name(&self) -> &str {
match self.origin {
Some(ref origin) => origin,
None => DEFAULT_NAME,
}
}
}