use package system

This commit is contained in:
NotAFile 2022-01-23 22:51:39 +01:00
parent a1f953e989
commit b22c348d8f
2 changed files with 19 additions and 4 deletions

View File

@ -26,7 +26,10 @@ struct Opt {
fn main() { fn main() {
let opt = Opt::from_args(); let opt = Opt::from_args();
let mut infile = File::open(opt.input).expect("could not open file"); // let mut infile = File::open(opt.input).expect("could not open file");
let packages = package::PackageRegistry::new();
let mut infile = packages.get("builtins").expect("no package").open().expect("could not open file");
let mut input = String::new(); let mut input = String::new();
infile infile
.read_to_string(&mut input) .read_to_string(&mut input)

View File

@ -1,17 +1,25 @@
use std::collections::BTreeMap; use std::collections::BTreeMap;
use std::path::PathBuf; use std::path::PathBuf;
use std::fs::File;
struct Package { pub struct Package {
name: String, name: String,
path: PathBuf, path: PathBuf,
} }
struct PackageRegistry { impl Package {
pub fn open(&self) -> Result<File, std::io::Error> {
let filepath = self.path.with_file_name("main.hyd");
File::open(filepath)
}
}
pub struct PackageRegistry {
packages: BTreeMap<String, Package> packages: BTreeMap<String, Package>
} }
impl PackageRegistry { impl PackageRegistry {
fn new() -> Self { pub fn new() -> Self {
let mut packages = BTreeMap::new(); let mut packages = BTreeMap::new();
packages.insert("builtins".to_string(), Package { packages.insert("builtins".to_string(), Package {
name: "builtins".to_string(), name: "builtins".to_string(),
@ -19,4 +27,8 @@ impl PackageRegistry {
}); });
Self { packages } Self { packages }
} }
pub fn get(&self, name: &str) -> Option<&Package> {
self.packages.get(name)
}
} }