feat(dependencies): add async-stream and bytes to Cargo.toml and Cargo.lock
Some checks failed
CI / Check / Test (push) Has been cancelled

refactor(adapters): update diary.rs to use BoxStream from futures
This commit is contained in:
2026-06-12 01:20:45 +02:00
parent d9234ecd11
commit aec5f6b058
7 changed files with 56 additions and 10 deletions

32
Cargo.lock generated
View File

@@ -314,6 +314,7 @@ name = "application"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"async-trait", "async-trait",
"bytes",
"chrono", "chrono",
"domain", "domain",
"futures", "futures",
@@ -567,6 +568,28 @@ dependencies = [
"windows-sys 0.61.2", "windows-sys 0.61.2",
] ]
[[package]]
name = "async-stream"
version = "0.3.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476"
dependencies = [
"async-stream-impl",
"futures-core",
"pin-project-lite",
]
[[package]]
name = "async-stream-impl"
version = "0.3.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.117",
]
[[package]] [[package]]
name = "async-task" name = "async-task"
version = "4.7.1" version = "4.7.1"
@@ -1822,9 +1845,12 @@ dependencies = [
name = "export" name = "export"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"async-stream",
"async-trait", "async-trait",
"bytes",
"chrono", "chrono",
"domain", "domain",
"futures",
"serde_json", "serde_json",
"tokio", "tokio",
"uuid", "uuid",
@@ -3848,9 +3874,12 @@ name = "postgres"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"async-stream",
"async-trait", "async-trait",
"bytes",
"chrono", "chrono",
"domain", "domain",
"futures",
"serde", "serde",
"serde_json", "serde_json",
"sqlx", "sqlx",
@@ -5124,9 +5153,12 @@ name = "sqlite"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"async-stream",
"async-trait", "async-trait",
"bytes",
"chrono", "chrono",
"domain", "domain",
"futures",
"serde", "serde",
"serde_json", "serde_json",
"sqlx", "sqlx",

View File

@@ -38,6 +38,7 @@ resolver = "2"
tokio = { version = "1.0", features = ["macros", "net", "rt", "rt-multi-thread", "sync", "time"] } tokio = { version = "1.0", features = ["macros", "net", "rt", "rt-multi-thread", "sync", "time"] }
bytes = "1" bytes = "1"
futures = "0.3" futures = "0.3"
async-stream = "0.3"
dotenvy = "0.15" dotenvy = "0.15"
serde = { version = "1.0", features = ["derive"] } serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0" serde_json = "1.0"

View File

@@ -19,8 +19,10 @@ async fn collect_stream(
fn entry_stream( fn entry_stream(
entries: Vec<domain::models::DiaryEntry>, entries: Vec<domain::models::DiaryEntry>,
) -> futures::stream::BoxStream<'static, Result<domain::models::DiaryEntry, domain::errors::DomainError>> ) -> futures::stream::BoxStream<
{ 'static,
Result<domain::models::DiaryEntry, domain::errors::DomainError>,
> {
Box::pin(futures::stream::iter(entries.into_iter().map(Ok))) Box::pin(futures::stream::iter(entries.into_iter().map(Ok)))
} }
@@ -122,12 +124,17 @@ async fn external_metadata_id_included_when_present() {
let arr: Vec<serde_json::Value> = serde_json::from_slice(&bytes).unwrap(); let arr: Vec<serde_json::Value> = serde_json::from_slice(&bytes).unwrap();
assert_eq!(arr[0]["external_metadata_id"], "tt0078748"); assert_eq!(arr[0]["external_metadata_id"], "tt0078748");
let bytes = collect_stream( let bytes = collect_stream(adapter.stream_entries(
adapter.stream_entries( entry_stream(vec![make_entry_full(
entry_stream(vec![make_entry_full("Alien", 1979, None, 5, None, Some("tt0078748"))]), "Alien",
ExportFormat::Csv, 1979,
), None,
) 5,
None,
Some("tt0078748"),
)]),
ExportFormat::Csv,
))
.await; .await;
let text = String::from_utf8(bytes).unwrap(); let text = String::from_utf8(bytes).unwrap();
assert!(text.contains("tt0078748")); assert!(text.contains("tt0078748"));

View File

@@ -20,3 +20,6 @@ async-trait = { workspace = true }
tokio = { workspace = true } tokio = { workspace = true }
serde = { workspace = true, features = ["derive"] } serde = { workspace = true, features = ["derive"] }
serde_json = { workspace = true } serde_json = { workspace = true }
futures = { workspace = true }
bytes = { workspace = true }
async-stream = { workspace = true }

View File

@@ -1,5 +1,4 @@
use async_trait::async_trait; use async_trait::async_trait;
use futures::stream::BoxStream;
use domain::{ use domain::{
errors::DomainError, errors::DomainError,
models::{ models::{
@@ -9,6 +8,7 @@ use domain::{
ports::DiaryRepository, ports::DiaryRepository,
value_objects::{MovieId, UserId}, value_objects::{MovieId, UserId},
}; };
use futures::stream::BoxStream;
use sqlx::PgPool; use sqlx::PgPool;
use crate::models::{DiaryRow, FeedRow, MovieRow, MovieStatsRow, ReviewRow}; use crate::models::{DiaryRow, FeedRow, MovieRow, MovieStatsRow, ReviewRow};

View File

@@ -20,3 +20,6 @@ chrono = { workspace = true }
tracing = { workspace = true } tracing = { workspace = true }
async-trait = { workspace = true } async-trait = { workspace = true }
tokio = { workspace = true } tokio = { workspace = true }
futures = { workspace = true }
bytes = { workspace = true }
async-stream = { workspace = true }

View File

@@ -1,5 +1,4 @@
use async_trait::async_trait; use async_trait::async_trait;
use futures::stream::BoxStream;
use domain::{ use domain::{
errors::DomainError, errors::DomainError,
models::{ models::{
@@ -9,6 +8,7 @@ use domain::{
ports::DiaryRepository, ports::DiaryRepository,
value_objects::{MovieId, UserId}, value_objects::{MovieId, UserId},
}; };
use futures::stream::BoxStream;
use sqlx::SqlitePool; use sqlx::SqlitePool;
use crate::models::{DiaryRow, FeedRow, MovieRow, MovieStatsRow, ReviewRow}; use crate::models::{DiaryRow, FeedRow, MovieRow, MovieStatsRow, ReviewRow};