diff --git a/implementations/rust/oo/src/lib.rs b/implementations/rust/oo/src/lib.rs index 193b798..a57da7a 100644 --- a/implementations/rust/oo/src/lib.rs +++ b/implementations/rust/oo/src/lib.rs @@ -74,7 +74,7 @@ pub trait Value: Debug { fn has(&self, _v: &dyn Value) -> bool { false } fn is_dictionary(&self) -> bool { false } - fn get<'v>(&'v self, _k: &'v dyn Value) -> Option<&'v dyn Value> { None } + fn get(&self, _k: &(dyn Value + 'static)) -> Option<&dyn Value> { None } fn entries(&self) -> Option, &dyn Value)> + '_>> { None } fn is_embedded(&self) -> bool { false } @@ -105,7 +105,7 @@ impl<'a, D: Domain, V: Value + ?Sized> Value for &'a V { fn is_set(&self) -> bool { (*self).is_set() } fn has(&self, v: &dyn Value) -> bool { (*self).has(v) } fn is_dictionary(&self) -> bool { (*self).is_dictionary() } - fn get<'v>(&'v self, k: &'v dyn Value) -> Option<&'v dyn Value> { (*self).get(k) } + fn get(&self, k: &(dyn Value + 'static)) -> Option<&dyn Value> { (*self).get(k) } fn entries(&self) -> Option, &dyn Value)> + '_>> { (*self).entries() } fn is_embedded(&self) -> bool { (*self).is_embedded() } fn embedded(&self) -> Option> { (*self).embedded() } @@ -130,7 +130,7 @@ impl Value for Box> { fn is_set(&self) -> bool { self.as_ref().is_set() } fn has(&self, v: &dyn Value) -> bool { self.as_ref().has(v) } fn is_dictionary(&self) -> bool { self.as_ref().is_dictionary() } - fn get<'v>(&'v self, k: &'v dyn Value) -> Option<&'v dyn Value> { self.as_ref().get(k) } + fn get(&self, k: &(dyn Value + 'static)) -> Option<&dyn Value> { self.as_ref().get(k) } fn entries(&self) -> Option, &dyn Value)> + '_>> { self.as_ref().entries() } fn is_embedded(&self) -> bool { self.as_ref().is_embedded() } fn embedded(&self) -> Option> { self.as_ref().embedded() } @@ -346,7 +346,7 @@ impl> Value for Map>, V> { fn is_dictionary(&self) -> bool { true } fn len(&self) -> Option { Some(self.len()) } fn has(&self, v: &dyn Value) -> bool { self.contains_key(v) } - fn get<'v>(&'v self, k: &'v dyn Value) -> Option<&'v dyn Value> { + fn get(&self, k: &(dyn Value + 'static)) -> Option<&dyn Value> { match Map::get(self, k) { Some(v) => Some(v), None => None, @@ -395,7 +395,7 @@ impl> Value for Annotations { fn is_set(&self) -> bool { self.value().is_set() } fn has(&self, v: &dyn Value) -> bool { self.value().has(v) } fn is_dictionary(&self) -> bool { self.value().is_dictionary() } - fn get<'v>(&'v self, k: &'v dyn Value) -> Option<&'v dyn Value> { self.value().get(k) } + fn get(&self, k: &(dyn Value + 'static)) -> Option<&dyn Value> { self.value().get(k) } fn entries(&self) -> Option, &dyn Value)> + '_>> { self.value().entries() } fn is_embedded(&self) -> bool { self.value().is_embedded() } fn embedded(&self) -> Option> { self.value().embedded() } @@ -432,6 +432,10 @@ impl> Ord for Annotations { mod demo { use crate::*; + fn getit<'a>(d: &'a dyn Value, k: &str) -> Option<&'a dyn Value> { + d.get(&k as &(dyn Value + 'static)) + } + #[test] fn a() { let mut v: Map>, String> = Map::new(); v.insert(Box::new("abc"), "def".to_owned()); @@ -447,5 +451,14 @@ mod demo { for (kk, vv) in w.entries().unwrap() { println!("{:?} {:?} ==> {:?} {:?}", kk.value_class(), kk, vv.value_class(), vv); } + + // { + // use std::io::BufRead; + // for line in std::io::stdin().lock().lines() { + // let line = line.unwrap(); + // let val = w.get(&line); + // println!("{:?} = {:?}", line, val); + // } + // } } }