Merge branch 'try-associated-type' of git.g4b.org:g4borg/miniweb into try-associated-type

This commit is contained in:
Gabor Körber 2024-05-21 21:46:10 +02:00
commit 6b207872a1

View File

@ -0,0 +1,37 @@
pub trait Repository {
type Key;
fn get_data(&self, key: Self::Key) -> String;
fn set_data(&self, key: Self::Key, value: String);
}
use std::any::Any;
trait Key: Any {
fn as_any(&self) -> &dyn Any;
fn from_str(s: &str) -> Self where Self: Sized;
fn to_string(&self) -> String;
}
impl<T: Any> Key for T {
fn as_any(&self) -> &dyn Any {
self
}
}
impl Key for String {
fn from_str(s: &str) -> Self {
s.to_string()
}
fn to_string(&self) -> String {
self.clone()
}
}
pub trait RepositoryTypeErased {
fn get_data(&self, key: Key) -> String;
fn set_data(&self, key: Key, value: String);
}