blob: 2743a697bb219d6553495bf2fc0b41e67459ba51 (
plain)
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
|
use std::collections::HashMap;
use crate::target::Target;
use crate::document_tree::{
Document,
HasChildren,
attribute_types::ID,
element_categories as c,
};
trait ResolvableRefs {
fn populate_targets(&self, refs: &mut HashMap<&ID, Target>);
fn resolve_refs(self, refs: &HashMap<&ID, Target>) -> Self;
}
pub fn resolve_references(mut doc: Document) -> Document {
let mut references = HashMap::new();
for c in doc.children() {
c.populate_targets(&mut references);
}
let new: Vec<_> = doc.children_mut().drain(..).map(|c| c.resolve_refs(&references)).collect();
Document::with_children(new)
}
impl ResolvableRefs for c::StructuralSubElement {
fn populate_targets(&self, refs: &mut HashMap<&ID, Target>) {
//TODO
}
fn resolve_refs(self, refs: &HashMap<&ID, Target>) -> Self {
self //TODO
}
}
|