use std::collections::HashSet;
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum DataSetCapability {
Readable,
Insertable,
Writable,
Indexable, }
pub trait DataSetCandidate: Send + Sync {
fn name(&self) -> &str;
fn capabilities(&self) -> HashSet<DataSetCapability>;
fn has_capability(&self, capability: &DataSetCapability) -> bool {
self.capabilities().contains(capability)
}
fn clone_box(&self) -> Box<dyn DataSetCandidate>;
fn metadata(&self) -> serde_json::Value {
serde_json::json!({
"name": self.name(),
"capabilities": self.capabilities().iter().map(|c| format!("{:?}", c)).collect::<Vec<_>>()
})
}
}
impl Clone for Box<dyn DataSetCandidate> {
fn clone(&self) -> Self {
self.clone_box()
}
}