use anyhow::{Error, Ok, Result}; use dotenv_codegen::dotenv; use serde_json::{from_str, Value}; use std::fs::File; use std::io::{BufRead, BufReader}; use surrealdb::{engine::remote::ws::Ws, opt::auth::Root, Surreal}; use wikidata::Entity; mod utils; use utils::*; #[tokio::main] async fn main() -> Result<(), Error> { let db = Surreal::new::("0.0.0.0:8000").await?; db.signin(Root { username: dotenv!("DB_USER"), password: dotenv!("DB_PASSWORD"), }) .await?; db.use_ns("wikidata").use_db("wikidata").await?; let file = File::open("data/e.json")?; let reader = BufReader::new(file); for line in reader.lines() { let line = line?.trim().trim_end_matches(',').to_string(); if line == "[" || line == "]" { continue; } let json: Value = from_str(&line)?; let data = Entity::from_json(json).expect("Failed to parse JSON"); let (mut claims, mut data) = EntityMini::from_entity(data); let id = data.id.clone().expect("No ID"); data.id = None; let _: Option = db.delete(&id).await?; let _: Option = db.create(&id).content(data.clone()).await?; let id = claims.id.clone().expect("No ID"); claims.id = None; let _: Option = db.delete(&id).await?; let _: Option = db.create(&id).content(claims).await?; } Ok(()) }