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",
]
[[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]]
name = "async-stream"
version = "0.3.5"
@ -1910,6 +1921,7 @@ dependencies = [
"actix-web",
"actix-web-prom",
"anyhow",
"async-recursion",
"async-trait",
"async_once",
"chrono",

View file

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

View file

@ -4,6 +4,7 @@ use chrono::{DateTime, TimeZone, Utc};
use sea_orm::{ActiveModelTrait, ColumnTrait, EntityTrait, QueryFilter, Set};
use anyhow::{anyhow, Ok};
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};
@ -22,7 +23,7 @@ pub async fn option_content_format_text(opt: Option<ContentFormat>) -> Option<St
None
}
#[async_recursion]
pub async fn db_post_from_url(url: Url) -> anyhow::Result<entities::post::Model> {
if !url.domain().eq(&Some(LYSAND_DOMAIN.as_str())) {
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?;
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> {
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;
@ -131,7 +132,7 @@ pub async fn receive_lysand_note(note: Note, db_id: String) -> anyhow::Result<cr
} else {
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 fake_rep_url = Url::parse(&format!(
"https://{}/apbridge/object/{}",