use crate::Source;
#[derive(Debug)]
pub struct OwnedSource {
name: Option<String>,
text: String,
}
impl OwnedSource {
pub fn new<N, T>(optname: Option<N>, text: T) -> Self
where
String: From<N>,
String: From<T>,
{
OwnedSource {
name: optname.map(|n| String::from(n)),
text: String::from(text),
}
}
pub fn new_named<N, T>(name: N, text: T) -> Self
where
String: From<N>,
String: From<T>,
{
OwnedSource::new(Some(name), text)
}
pub fn new_unnamed<T>(text: T) -> Self
where
String: From<T>,
{
OwnedSource::new(None, text)
}
pub fn name(&self) -> &str {
use crate::optname_to_str;
optname_to_str(self.name.as_ref().map(|s| s.as_ref()))
}
pub fn text(&self) -> &str {
self.text.as_ref()
}
pub fn source(&self) -> Source {
Source::new(self.name.as_ref(), self.text())
}
pub fn unwrap(self) -> (Option<String>, String) {
(self.name, self.text)
}
}