summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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);