use runestick::{Source, SourceId};
use std::sync::Arc;
#[derive(Debug, Default)]
pub struct Sources {
sources: Vec<Arc<Source>>,
}
impl Sources {
pub fn new() -> Self {
Self {
sources: Vec::new(),
}
}
pub fn source_at(&self, source_id: SourceId) -> Option<&Arc<Source>> {
self.sources.get(source_id)
}
#[deprecated = "use `insert` instead"]
pub fn insert_default(&mut self, source: Source) -> SourceId {
self.insert(source)
}
pub fn insert(&mut self, source: Source) -> SourceId {
let source_id = self.sources.len();
self.sources.push(Arc::new(source));
source_id
}
pub fn get(&self, source_id: usize) -> Option<&Arc<Source>> {
self.sources.get(source_id)
}
pub(crate) fn source_ids(&self) -> impl Iterator<Item = SourceId> {
0..self.sources.len()
}
pub(crate) fn iter(&self) -> impl Iterator<Item = &Source> {
self.sources.iter().map(|s| &**s)
}
}