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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
use std::path::PathBuf; use crate::analysis::ModuleId; use crate::ast::Module; #[derive(Debug, Clone)] pub enum ModuleSource { Anonymous(Option<String>), File(PathBuf), } impl std::fmt::Display for ModuleSource { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { match self { ModuleSource::Anonymous(Some(ref a)) => write!(f, "{}", a), ModuleSource::Anonymous(None) => write!(f, "{}", "anonymous"), ModuleSource::File(ref buff) => write!(f, "{}", buff.display()), } } } pub struct UnparsedModule<'a> { pub source: ModuleSource, pub module: &'a str, } impl<'a> UnparsedModule<'a> { pub fn file(path: PathBuf, data: &str) -> UnparsedModule { UnparsedModule { source: ModuleSource::File(path), module: data, } } pub fn anonymous(data: &str) -> UnparsedModule { UnparsedModule { source: ModuleSource::Anonymous(None), module: data, } } pub fn anonymous_hint(hint: String, data: &str) -> UnparsedModule { UnparsedModule { source: ModuleSource::Anonymous(Some(hint)), module: data, } } } pub struct ParsedModule { pub source: ModuleSource, pub module: Module, pub id: ModuleId, } impl ParsedModule { pub fn new(data: Module, source: ModuleSource) -> ParsedModule { ParsedModule { source: source, module: data, id: ModuleId::new(), } } pub fn id(&self) -> ModuleId { self.id } }