Pass JSON into the database as fields.

This commit is contained in:
mattbk
2025-10-12 20:59:51 -05:00
parent 0698deee41
commit d8cdcfeb12
3 changed files with 29 additions and 9 deletions

1
Cargo.lock generated
View File

@ -109,6 +109,7 @@ dependencies = [
"fallible-streaming-iterator", "fallible-streaming-iterator",
"hashlink", "hashlink",
"libsqlite3-sys", "libsqlite3-sys",
"serde_json",
"smallvec", "smallvec",
] ]

View File

@ -4,5 +4,5 @@ version = "0.1.0"
edition = "2024" edition = "2024"
[dependencies] [dependencies]
rusqlite = "0.37.0" rusqlite = {version = "0.37.0", features = ["serde_json"]}
serde_json = "1.0.145" serde_json = "1.0.145"

View File

@ -3,7 +3,6 @@ use rusqlite::{params, Connection, Result}; // Database operations and result ha
use std::time::{SystemTime, UNIX_EPOCH}; use std::time::{SystemTime, UNIX_EPOCH};
use serde_json::{Value}; use serde_json::{Value};
fn main() -> std::io::Result<()> { fn main() -> std::io::Result<()> {
// Set up db and make sure it works // Set up db and make sure it works
@ -39,8 +38,12 @@ fn main() -> std::io::Result<()> {
// look for type code in JSON here, only insert if data // look for type code in JSON here, only insert if data
let p: Value = serde_json::from_str(p_raw)?; let p: Value = serde_json::from_str(p_raw)?;
//p.what_is_this;
//println!("{}",p["type"]);
if p["type"] != "status" { if p["type"] != "status" {
let _ = insert_packet(p_raw); let _ = insert_packet(p);
} }
// Echo the data back to the client // Echo the data back to the client
@ -58,8 +61,11 @@ fn create_database() -> Result<()> {
conn.execute( conn.execute(
"CREATE TABLE IF NOT EXISTS packets ( "CREATE TABLE IF NOT EXISTS packets (
id INTEGER PRIMARY KEY AUTOINCREMENT, id INTEGER PRIMARY KEY AUTOINCREMENT,
raw TEXT NOT NULL, date INTEGER NOT NULL,
date INTEGER NOT NULL source TEXT,
summary TEXT,
final_destination TEXT,
text TEXT
)", )",
[], // No parameters needed [], // No parameters needed
)?; )?;
@ -68,15 +74,28 @@ fn create_database() -> Result<()> {
Ok(()) Ok(())
} }
fn insert_packet(raw: &str) -> Result<()> { fn insert_packet(p_json: serde_json::Value) -> Result<()> {
let conn = Connection::open("pkt_database.db")?; let conn = Connection::open("pkt_database.db")?;
let ds = SystemTime::now().duration_since(UNIX_EPOCH).unwrap().as_secs(); let ds = SystemTime::now().duration_since(UNIX_EPOCH).unwrap().as_secs();
//println!{"{}", p_json["type"]}
//println!("{}", p_json);
//println!("{}", &p_json["source"]);
// Insert // Insert
conn.execute( conn.execute(
"INSERT INTO packets (raw, date) VALUES (?1, ?2)", "INSERT INTO packets (date,
params![raw, ds], // Bind parameters source,
summary,
final_destination,
text) VALUES (?1, ?2, ?3, ?4, ?5)",
params![ds,
&p_json["source"],
&p_json["summary"],
&p_json["final_destination"],
&p_json["text"]], // Bind parameters
)?; )?;
//println!("Row inserted successfully."); //println!("Row inserted successfully.");