]> Untitled Git - lemmy.git/blobdiff - crates/routes/src/nodeinfo.rs
Make functions work with both connection and pool (#3420)
[lemmy.git] / crates / routes / src / nodeinfo.rs
index 13786e3b691ba0a96c362ef0e768240e3e7f573e..ef654462276642f085e1c77beb9fb25cda1ad4d0 100644 (file)
@@ -1,6 +1,7 @@
 use actix_web::{error::ErrorBadRequest, web, Error, HttpResponse, Result};
 use anyhow::anyhow;
 use lemmy_api_common::context::LemmyContext;
+use lemmy_db_schema::RegistrationMode;
 use lemmy_db_views::structs::SiteView;
 use lemmy_utils::{error::LemmyError, version};
 use serde::{Deserialize, Serialize};
@@ -28,33 +29,33 @@ async fn node_info_well_known(
 }
 
 async fn node_info(context: web::Data<LemmyContext>) -> Result<HttpResponse, Error> {
-  let site_view = SiteView::read_local(context.pool())
+  let site_view = SiteView::read_local(&mut context.pool())
     .await
     .map_err(|_| ErrorBadRequest(LemmyError::from(anyhow!("not_found"))))?;
 
   let protocols = if site_view.local_site.federation_enabled {
-    vec!["activitypub".to_string()]
+    Some(vec!["activitypub".to_string()])
   } else {
-    vec![]
+    None
   };
-
+  let open_registrations = Some(site_view.local_site.registration_mode == RegistrationMode::Open);
   let json = NodeInfo {
-    version: "2.0".to_string(),
-    software: NodeInfoSoftware {
-      name: "lemmy".to_string(),
-      version: version::VERSION.to_string(),
-    },
+    version: Some("2.0".to_string()),
+    software: Some(NodeInfoSoftware {
+      name: Some("lemmy".to_string()),
+      version: Some(version::VERSION.to_string()),
+    }),
     protocols,
-    usage: NodeInfoUsage {
-      users: NodeInfoUsers {
-        total: site_view.counts.users,
-        active_halfyear: site_view.counts.users_active_half_year,
-        active_month: site_view.counts.users_active_month,
-      },
-      local_posts: site_view.counts.posts,
-      local_comments: site_view.counts.comments,
-    },
-    open_registrations: site_view.local_site.open_registration,
+    usage: Some(NodeInfoUsage {
+      users: Some(NodeInfoUsers {
+        total: Some(site_view.counts.users),
+        active_halfyear: Some(site_view.counts.users_active_half_year),
+        active_month: Some(site_view.counts.users_active_month),
+      }),
+      local_posts: Some(site_view.counts.posts),
+      local_comments: Some(site_view.counts.comments),
+    }),
+    open_registrations,
   };
 
   Ok(HttpResponse::Ok().json(json))
@@ -71,34 +72,35 @@ struct NodeInfoWellKnownLinks {
   pub href: Url,
 }
 
-#[derive(Serialize, Deserialize, Debug)]
-#[serde(rename_all = "camelCase")]
-struct NodeInfo {
-  pub version: String,
-  pub software: NodeInfoSoftware,
-  pub protocols: Vec<String>,
-  pub usage: NodeInfoUsage,
-  pub open_registrations: bool,
+#[derive(Serialize, Deserialize, Debug, Default)]
+#[serde(rename_all = "camelCase", default)]
+pub struct NodeInfo {
+  pub version: Option<String>,
+  pub software: Option<NodeInfoSoftware>,
+  pub protocols: Option<Vec<String>>,
+  pub usage: Option<NodeInfoUsage>,
+  pub open_registrations: Option<bool>,
 }
 
-#[derive(Serialize, Deserialize, Debug)]
-struct NodeInfoSoftware {
-  pub name: String,
-  pub version: String,
+#[derive(Serialize, Deserialize, Debug, Default)]
+#[serde(default)]
+pub struct NodeInfoSoftware {
+  pub name: Option<String>,
+  pub version: Option<String>,
 }
 
-#[derive(Serialize, Deserialize, Debug)]
-#[serde(rename_all = "camelCase")]
-struct NodeInfoUsage {
-  pub users: NodeInfoUsers,
-  pub local_posts: i64,
-  pub local_comments: i64,
+#[derive(Serialize, Deserialize, Debug, Default)]
+#[serde(rename_all = "camelCase", default)]
+pub struct NodeInfoUsage {
+  pub users: Option<NodeInfoUsers>,
+  pub local_posts: Option<i64>,
+  pub local_comments: Option<i64>,
 }
 
-#[derive(Serialize, Deserialize, Debug)]
-#[serde(rename_all = "camelCase")]
-struct NodeInfoUsers {
-  pub total: i64,
-  pub active_halfyear: i64,
-  pub active_month: i64,
+#[derive(Serialize, Deserialize, Debug, Default)]
+#[serde(rename_all = "camelCase", default)]
+pub struct NodeInfoUsers {
+  pub total: Option<i64>,
+  pub active_halfyear: Option<i64>,
+  pub active_month: Option<i64>,
 }