mirror of
https://git.proxmox.com/git/rustc
synced 2026-03-28 17:55:13 +00:00
51 lines
1.4 KiB
Rust
51 lines
1.4 KiB
Rust
use elsa::FrozenMap;
|
|
|
|
/// Stores some parsed AST representation of the file
|
|
#[derive(Debug)]
|
|
pub struct FluentResource<'mgr>(&'mgr str);
|
|
|
|
impl<'mgr> FluentResource<'mgr> {
|
|
pub fn new(s: &'mgr str) -> Self {
|
|
// very simple parse step
|
|
FluentResource(&s[0..1])
|
|
}
|
|
}
|
|
|
|
/// Stores loaded files and parsed ASTs
|
|
///
|
|
/// Parsed ASTs are zero-copy and
|
|
/// contain references to the files
|
|
pub struct ResourceManager<'mgr> {
|
|
strings: FrozenMap<String, String>,
|
|
resources: FrozenMap<String, Box<FluentResource<'mgr>>>,
|
|
}
|
|
|
|
impl<'mgr> ResourceManager<'mgr> {
|
|
pub fn new() -> Self {
|
|
ResourceManager {
|
|
strings: FrozenMap::new(),
|
|
resources: FrozenMap::new(),
|
|
}
|
|
}
|
|
|
|
pub fn get_resource(&'mgr self, path: &str) -> &'mgr FluentResource<'mgr> {
|
|
let strings = &self.strings;
|
|
|
|
if strings.get(path).is_some() {
|
|
return self.resources.get(path).unwrap();
|
|
} else {
|
|
// pretend to load a file
|
|
let string = format!("file for {}", path);
|
|
let val = self.strings.insert(path.to_string(), string);
|
|
let res = FluentResource::new(val);
|
|
self.resources.insert(path.to_string(), Box::new(res))
|
|
}
|
|
}
|
|
}
|
|
|
|
fn main() {
|
|
let manager = ResourceManager::new();
|
|
let resource = manager.get_resource("somefile.ftl");
|
|
println!("{:?}", resource);
|
|
}
|