optirs_core/research/
datasets.rs

1use serde::{Deserialize, Serialize};
2use std::collections::HashMap;
3
4/// Represents a research dataset
5#[derive(Debug, Clone, Serialize, Deserialize)]
6pub struct Dataset {
7    pub id: String,
8    pub name: String,
9    pub description: String,
10    pub source: DatasetSource,
11    pub metadata: DatasetMetadata,
12}
13
14/// Source information for a dataset
15#[derive(Debug, Clone, Serialize, Deserialize)]
16pub struct DatasetSource {
17    pub url: Option<String>,
18    pub doi: Option<String>,
19    pub repository: Option<String>,
20}
21
22/// Metadata for a dataset
23#[derive(Debug, Clone, Serialize, Deserialize)]
24pub struct DatasetMetadata {
25    pub size: usize,
26    pub format: String,
27    pub features: Vec<String>,
28    pub tags: Vec<String>,
29    pub license: Option<String>,
30}
31
32/// Manager for research datasets
33#[derive(Debug, Default)]
34pub struct DatasetManager {
35    datasets: HashMap<String, Dataset>,
36}
37
38impl DatasetManager {
39    pub fn new() -> Self {
40        Self {
41            datasets: HashMap::new(),
42        }
43    }
44
45    pub fn add_dataset(&mut self, dataset: Dataset) {
46        self.datasets.insert(dataset.id.clone(), dataset);
47    }
48
49    pub fn get_dataset(&self, id: &str) -> Option<&Dataset> {
50        self.datasets.get(id)
51    }
52
53    pub fn list_datasets(&self) -> Vec<&Dataset> {
54        self.datasets.values().collect()
55    }
56}