summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPietro Albini <pietro@pietroalbini.org>2019-02-05 10:27:20 +0100
committerPietro Albini <pietro@pietroalbini.org>2019-02-05 10:27:20 +0100
commit670c2d554bdbbe13e98deff3d6821b894943b812 (patch)
treeef7428afdf5fd05af3bfd45c153d239c26c83ef2
parent9a81125fc2bce72c2de49ce7813ab393ea4ae121 (diff)
add mailing lists to the static API
-rw-r--r--rust_team_data/src/v1.rs11
-rw-r--r--src/static_api.rs21
2 files changed, 32 insertions, 0 deletions
diff --git a/rust_team_data/src/v1.rs b/rust_team_data/src/v1.rs
index 5387028..2bf5bfd 100644
--- a/rust_team_data/src/v1.rs
+++ b/rust_team_data/src/v1.rs
@@ -48,3 +48,14 @@ pub struct Teams {
#[serde(flatten)]
pub teams: IndexMap<String, Team>,
}
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct List {
+ pub address: String,
+ pub members: Vec<String>,
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct Lists {
+ pub lists: IndexMap<String, List>,
+}
diff --git a/src/static_api.rs b/src/static_api.rs
index 1beea23..164cfbe 100644
--- a/src/static_api.rs
+++ b/src/static_api.rs
@@ -22,6 +22,7 @@ impl<'a> Generator<'a> {
pub(crate) fn generate(&self) -> Result<(), Error> {
self.generate_teams()?;
+ self.generate_lists()?;
Ok(())
}
@@ -78,6 +79,26 @@ impl<'a> Generator<'a> {
Ok(())
}
+ fn generate_lists(&self) -> Result<(), Error> {
+ let mut lists = IndexMap::new();
+
+ for list in self.data.lists()?.values() {
+ let mut members = list.emails().to_vec();
+ members.sort();
+ lists.insert(list.address().to_string(), v1::List {
+ address: list.address().to_string(),
+ members,
+ });
+ }
+
+ lists.sort_keys();
+ self.add(
+ "v1/lists.json",
+ &v1::Lists { lists },
+ )?;
+ Ok(())
+ }
+
fn add<T: serde::Serialize>(&self, path: &str, obj: &T) -> Result<(), Error> {
info!("writing API object {}...", path);
let dest = self.dest.join(path);