1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
use crate::{FileName, Span, SpanFile}; use derive_new::new; use lark_debug_derive::DebugWith; #[derive(Copy, Clone, Debug, DebugWith, Eq, PartialEq, Ord, PartialOrd, Hash, new)] pub struct Spanned<T, File: SpanFile> { pub value: T, pub span: Span<File>, } impl<T, File: SpanFile> Spanned<T, File> { pub fn map<U>(self, value: impl FnOnce(T) -> U) -> Spanned<U, File> { Spanned { value: value(self.value), span: self.span, } } pub fn in_file_named(self, file_name: FileName) -> Spanned<T, FileName> { Spanned { value: self.value, span: self.span.in_file_named(file_name), } } } impl<T, File: SpanFile> std::ops::Deref for Spanned<T, File> { type Target = T; fn deref(&self) -> &T { &self.value } }