1use crate::FileSystem;
2use std::{fmt, path::PathBuf};
3
4#[derive(PartialEq, Eq, Clone, Copy, Hash)]
6#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
7#[cfg_attr(target_family = "wasm", derive(tsify::Tsify))]
8pub struct SourceId(pub(crate) u16);
9
10impl fmt::Debug for SourceId {
11 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
12 f.write_fmt(format_args!("SourceId({})", self.0))
13 }
14}
15
16impl SourceId {
17 pub fn new(filesystem: &mut impl FileSystem, path: PathBuf, content: String) -> Self {
19 filesystem.new_source_id(path, content)
20 }
21}
22
23#[cfg(feature = "self-rust-tokenize")]
24pub const SPAN_TOKEN_IDENT: &str = "CURRENT_SOURCE_ID";
25
26#[cfg(feature = "self-rust-tokenize")]
27impl self_rust_tokenize::SelfRustTokenize for SourceId {
28 fn append_to_token_stream(
29 &self,
30 token_stream: &mut self_rust_tokenize::proc_macro2::TokenStream,
31 ) {
32 let current_source_id_reference = self_rust_tokenize::proc_macro2::Ident::new(
33 SPAN_TOKEN_IDENT,
34 self_rust_tokenize::proc_macro2::Span::call_site(),
35 );
36 self_rust_tokenize::TokenStreamExt::append(token_stream, current_source_id_reference);
37 }
38}