feat: Update dependencies and add async-recursion crate

This commit is contained in:
aprilthepink 2024-06-17 21:40:25 +02:00
parent 1588b2e46c
commit 9e148fe77f
3 changed files with 17 additions and 3 deletions

12
Cargo.lock generated
View file

@ -409,6 +409,17 @@ dependencies = [
"pin-project-lite", "pin-project-lite",
] ]
[[package]]
name = "async-recursion"
version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.58",
]
[[package]] [[package]]
name = "async-stream" name = "async-stream"
version = "0.3.5" version = "0.3.5"
@ -1910,6 +1921,7 @@ dependencies = [
"actix-web", "actix-web",
"actix-web-prom", "actix-web-prom",
"anyhow", "anyhow",
"async-recursion",
"async-trait", "async-trait",
"async_once", "async_once",
"chrono", "chrono",

View file

@ -33,6 +33,7 @@ reqwest = { version = "0.12.4", features = ["blocking", "json", "multipart"] }
time = { version = "0.3.36", features = ["serde"] } time = { version = "0.3.36", features = ["serde"] }
serde_derive = "1.0.201" serde_derive = "1.0.201"
dotenv = "0.15.0" dotenv = "0.15.0"
async-recursion = "1.1.1"
[dependencies.sea-orm] [dependencies.sea-orm]
version = "0.12.0" version = "0.12.0"

View file

@ -4,6 +4,7 @@ use chrono::{DateTime, TimeZone, Utc};
use sea_orm::{ActiveModelTrait, ColumnTrait, EntityTrait, QueryFilter, Set}; use sea_orm::{ActiveModelTrait, ColumnTrait, EntityTrait, QueryFilter, Set};
use anyhow::{anyhow, Ok}; use anyhow::{anyhow, Ok};
use url::Url; use url::Url;
use async_recursion::async_recursion;
use crate::{database::State, entities::{self, post, prelude, user}, objects::post::Mention, utils::{generate_object_id, generate_user_id}, API_DOMAIN, DB, FEDERATION_CONFIG, LYSAND_DOMAIN}; use crate::{database::State, entities::{self, post, prelude, user}, objects::post::Mention, utils::{generate_object_id, generate_user_id}, API_DOMAIN, DB, FEDERATION_CONFIG, LYSAND_DOMAIN};
@ -22,7 +23,7 @@ pub async fn option_content_format_text(opt: Option<ContentFormat>) -> Option<St
None None
} }
#[async_recursion]
pub async fn db_post_from_url(url: Url) -> anyhow::Result<entities::post::Model> { pub async fn db_post_from_url(url: Url) -> anyhow::Result<entities::post::Model> {
if !url.domain().eq(&Some(LYSAND_DOMAIN.as_str())) { if !url.domain().eq(&Some(LYSAND_DOMAIN.as_str())) {
return Err(anyhow!("not lysands domain")); return Err(anyhow!("not lysands domain"));
@ -80,7 +81,7 @@ pub async fn fetch_note_from_url(url: Url) -> anyhow::Result<super::objects::Not
let request = req_client.get(url).send().await?; let request = req_client.get(url).send().await?;
Ok(request.json::<super::objects::Note>().await?) Ok(request.json::<super::objects::Note>().await?)
} }
#[async_recursion]
pub async fn receive_lysand_note(note: Note, db_id: String) -> anyhow::Result<crate::objects::post::Note> { pub async fn receive_lysand_note(note: Note, db_id: String) -> anyhow::Result<crate::objects::post::Note> {
let lysand_author: entities::user::Model = db_user_from_url(note.author.clone()).await?; let lysand_author: entities::user::Model = db_user_from_url(note.author.clone()).await?;
let user_res = prelude::User::find_by_id(db_id).one(DB.get().unwrap()).await; let user_res = prelude::User::find_by_id(db_id).one(DB.get().unwrap()).await;
@ -131,7 +132,7 @@ pub async fn receive_lysand_note(note: Note, db_id: String) -> anyhow::Result<cr
} else { } else {
None None
}; };
let reply_string: Option<String> = if let Some(rep) = note.replies_to { let reply_string: Option<String> = if let Some(rep) = note.replies_to.clone() {
let note = fetch_note_from_url(rep).await?; let note = fetch_note_from_url(rep).await?;
let fake_rep_url = Url::parse(&format!( let fake_rep_url = Url::parse(&format!(
"https://{}/apbridge/object/{}", "https://{}/apbridge/object/{}",