aboutsummaryrefslogtreecommitdiff
path: root/rust/grade-school/src/lib.rs
diff options
context:
space:
mode:
authorFederico Igne <git@federicoigne.com>2021-01-01 19:03:31 +0000
committerFederico Igne <git@federicoigne.com>2021-11-03 18:55:08 +0000
commitfdde4fcd039210d7378c3f31ec9372396b1464a9 (patch)
tree37bb80b186e27dbdea461afd77950ff96a870d09 /rust/grade-school/src/lib.rs
parent6ddf37f5142151639c3e9948a62d6c0abd77d3b9 (diff)
downloadexercism-fdde4fcd039210d7378c3f31ec9372396b1464a9.tar.gz
exercism-fdde4fcd039210d7378c3f31ec9372396b1464a9.zip
[rust] Grade School
Diffstat (limited to 'rust/grade-school/src/lib.rs')
-rw-r--r--rust/grade-school/src/lib.rs22
1 files changed, 22 insertions, 0 deletions
diff --git a/rust/grade-school/src/lib.rs b/rust/grade-school/src/lib.rs
new file mode 100644
index 0000000..266fb1f
--- /dev/null
+++ b/rust/grade-school/src/lib.rs
@@ -0,0 +1,22 @@
1use std::collections::{BTreeMap, BTreeSet};
2
3#[derive(Default)]
4pub struct School(BTreeMap<u32, BTreeSet<String>>);
5
6impl School {
7 pub fn new() -> School {
8 Self::default()
9 }
10
11 pub fn add(&mut self, grade: u32, student: &str) {
12 self.0.entry(grade).or_default().insert(student.to_string());
13 }
14
15 pub fn grades(&self) -> Vec<u32> {
16 self.0.keys().cloned().collect()
17 }
18
19 pub fn grade(&self, grade: u32) -> Option<Vec<String>> {
20 self.0.get(&grade).map(|vs| vs.iter().cloned().collect())
21 }
22}