| 80 | original_cache: &mut OriginalDocumentsHash, |
| 81 | resolved_cache: &mut ResolvedDocumentsHash, |
| 82 | ) -> Result<Rc<Value>, ResolverError> { |
| 83 | let json = get_resolved_or_original(&document, original_cache, resolved_cache)?; |
| 84 | match json { |
| 85 | Json::Resolved(j) => Ok(j), |
| 86 | Json::Original(j) => { |
| 87 | let mut resolving = (*j).clone(); |
| 88 | resolve_refs_recurse(&document, &mut resolving, &j, original_cache, resolved_cache)?; |
| 89 | let resolved = Rc::new(resolving); |
| 90 | resolved_cache.insert(document, resolved.clone()); |
| 91 | Ok(resolved) |
| 92 | } |
| 93 | } |
| 94 | } |
| 95 | |
| 96 | fn resolve_refs_recurse( |
| 97 | current_doc: &DocumentPath, |
| 98 | json: &mut Value, |
| 99 | original: &Value, |
| 100 | original_cache: &mut OriginalDocumentsHash, |
| 101 | resolved_cache: &mut ResolvedDocumentsHash, |