Implement automatic IDs

This commit is contained in:
Juno Takano 2025-12-10 09:58:44 -03:00
commit 400eb02efc
5 changed files with 26 additions and 32 deletions

View file

@ -55,6 +55,7 @@ fn modulate_nodes(old_nodes: HashMap<String, Node>) -> HashMap<String, Node> {
}
let new_node = Node {
id: key.clone(),
connections: Some(new_edges),
..node.clone()
};

View file

@ -95,11 +95,11 @@ async fn node_view(Path(id): Path<String>) -> impl IntoResponse {
let node: &Node = nodes.get(&id).unwrap_or(&empty_node);
context.insert("id", &node.id);
context.insert("id", &id);
context.insert("title", &node.title);
context.insert("body", &node.body);
context.insert("connections", &node.connections.clone());
context.insert("incoming", &graph.incoming.get(&node.id));
context.insert("incoming", &graph.incoming.get(&id));
template_handler(
"node.html",
@ -109,9 +109,9 @@ async fn node_view(Path(id): Path<String>) -> impl IntoResponse {
r#"Failed to generate page for node {} (ID {}) with {} outgoing,
{} incoming connections and body "{}""#,
node.title,
node.id,
id,
node.connections.iter().len(),
graph.incoming.get(&node.id).iter().len(),
graph.incoming.get(&id).iter().len(),
node.body,
),
)
@ -121,7 +121,7 @@ async fn index() -> Html<String> {
let mut context = tera::Context::new();
let graph = populate_graph();
let root_node = graph.get_root();
let root_node = graph.get_root().unwrap_or_default();
let nodes: Vec<Node> = graph.nodes.into_values().collect();
context.insert("nodes", &nodes);
@ -134,7 +134,7 @@ async fn tree() -> Html<String> {
let mut context = tera::Context::new();
let graph = populate_graph();
let root_node = graph.get_root();
let root_node = graph.get_root().unwrap_or_default();
let nodes: Vec<Node> = graph.nodes.into_values().collect();
context.insert("nodes", &nodes);

View file

@ -1,7 +1,7 @@
use serde::{Serialize, Deserialize};
use std::collections::HashMap;
#[derive(Serialize, Deserialize, Clone, Default)]
#[derive(Serialize, Deserialize, Clone, Default, Debug)]
pub struct Graph {
pub messages: Vec<String>,
pub root_node: String,
@ -10,7 +10,19 @@ pub struct Graph {
pub incoming: HashMap<String, Vec<Edge>>,
}
#[derive(Serialize, Clone, Default, PartialEq, Deserialize)]
#[derive(Serialize, Deserialize, Clone, Default, Debug)]
pub struct Node {
pub title: String,
pub body: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub connections: Option<Vec<Edge>>,
#[serde(default)]
pub links: Vec<String>,
#[serde(default)]
pub id: String,
}
#[derive(Serialize, Clone, Default, PartialEq, Deserialize, Debug)]
pub struct Edge {
pub to: String,
#[serde(default)]
@ -21,22 +33,11 @@ pub struct Edge {
pub detached: bool,
}
#[derive(Serialize, Deserialize, Clone, Default)]
pub struct Node {
pub title: String,
pub id: String,
pub body: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub connections: Option<Vec<Edge>>,
#[serde(default)]
pub links: Vec<String>,
}
impl Graph {
pub fn new(message: Option<String>) -> Graph {
Self {
nodes: HashMap::new(),
root_node: "".to_string(),
root_node: "VoidNode".to_string(),
incoming: HashMap::new(),
messages: vec![message
.unwrap_or("This graph is empty or in error".to_string())],
@ -54,8 +55,8 @@ impl Graph {
impl Node {
pub fn new(message: Option<String>) -> Node {
Self {
title: "Empty Node".to_string(),
id: "EmptyNode".to_string(),
id: "VoidNode".to_string(),
title: "Pure Void".to_string(),
body: match message {
Some(s) => s,
None => "Node is empty, missing or wasn't found.".to_string()