use std::fmt;
use crate::SourceCode;
#[derive(Clone)]
pub struct NamedSource<S: SourceCode> {
source: S,
name: String,
}
impl<S: SourceCode> fmt::Debug for NamedSource<S> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct("NamedSource")
.field("name", &self.name)
.field("source", &"<redacted>")
.finish()
}
}
impl<S: SourceCode> NamedSource<S> {
#[must_use]
pub fn new(name: impl AsRef<str>, source: S) -> Self {
Self { source, name: name.as_ref().to_string() }
}
}
impl<S: SourceCode> SourceCode for NamedSource<S> {
fn data(&self) -> &[u8] {
self.source.data()
}
fn name(&self) -> Option<&str> {
Some(&self.name)
}
}