Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- mod broken {
- use std::ops::Deref;
- pub struct Ref<'a, T: 'a + ?Sized> {
- data: &'a T,
- }
- impl<'a, T: 'a + ?Sized> Ref<'a, T> {
- fn data(&self) -> &T {
- self.data
- }
- }
- impl<'a, T: 'a + ?Sized> Deref for Ref<'a, T> {
- type Target = T;
- fn deref(&self) -> &T {
- self.data
- }
- }
- pub trait Elem {
- fn get_subelem<'a>(&'a self, name: &str) -> Option<Ref<'a, dyn Elem>>;
- }
- pub trait Table {
- fn get_elem<'a>(&'a self, name: &str) -> Option<Ref<'a, dyn Elem>>;
- }
- fn resolve_name<'a, T: Table + 'a>(
- table: &'a T,
- name: &[String],
- ) -> Option<Ref<'a, dyn Elem>> {
- let mut segments = name.iter();
- if let Some(first_segment) = segments.next() {
- segments.fold(table.get_elem(&first_segment), |res, next| {
- res.and_then(|elem| elem.data/*()*/.get_subelem(next))
- })
- } else {
- None
- }
- }
- }
Add Comment
Please, Sign In to add comment