Skip to main content

cairo_language_common/
file_ext.rs

1use 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}