cairo_language_common/
file_ext.rs1use cairo_lang_filesystem::{
2 db::ext_as_virtual,
3 ids::{FileId, FileLongId, VirtualFile},
4};
5use salsa::Database;
6
7pub trait FileIdExt<'db> {
8 fn maybe_as_virtual(&self, db: &'db dyn Database) -> Option<&'db VirtualFile<'db>>;
9 fn as_virtual(&self, db: &'db dyn Database) -> &'db VirtualFile<'db>;
10}
11
12impl<'db> FileIdExt<'db> for FileId<'db> {
13 fn maybe_as_virtual(&self, db: &'db dyn Database) -> Option<&'db VirtualFile<'db>> {
14 match self.long(db) {
15 FileLongId::OnDisk(_) => None,
16 FileLongId::External(ext) => Some(ext_as_virtual(db, *ext)),
17 FileLongId::Virtual(vfs) => Some(vfs),
18 }
19 }
20
21 fn as_virtual(&self, db: &'db dyn Database) -> &'db VirtualFile<'db> {
22 self.maybe_as_virtual(db).expect("file can't be OnDisk")
23 }
24}