Implement Associated Type for Keys #3

Merged
g4borg merged 5 commits from try-associated-type into main 2024-06-01 17:47:14 +02:00
Showing only changes of commit 6b207872a1 - Show all commits

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);
}