fal 0.3.6

A Rust crate for the fal.ai API, including generated, typed functions for all public models
Documentation
use fal::prelude::*;
use futures::StreamExt;
use serde::{Deserialize, Serialize};

#[derive(Debug, Deserialize, Serialize, Default)]
pub struct File {
    pub url: String,
    pub content_type: String,
    pub file_name: Option<String>,
    pub file_size: Option<i64>,
    pub width: Option<i64>,
    pub height: Option<i64>,
}

#[derive(Debug, Deserialize, Serialize)]
pub struct FalMultiImageResponse {
    pub images: Vec<File>,
}

#[fal::endpoint(endpoint = "fal-ai/flux/dev")]
fn fal_dev(prompt: String) -> FalMultiImageResponse {}

#[tokio::test]
async fn test_queue() {
    let queue = fal_dev("a horse".to_owned()).queue().await.unwrap();

    loop {
        let status = queue.status(false).await.unwrap();

        if status.status == Status::Completed {
            break;
        }

        tokio::time::sleep(std::time::Duration::from_secs(1)).await;
    }

    let response = queue.response().await.unwrap();

    assert!(response.images.len() > 0)
}

#[tokio::test]
async fn test_queue_status_stream() {
    let queue = fal_dev("a horse".to_owned()).queue().await.unwrap();

    while let Some(status) = queue.stream(false).await.unwrap().next().await {
        let status = status.unwrap();

        if status.status == Status::Completed {
            break;
        }
    }

    let response = queue.response().await.unwrap();

    assert!(response.images.len() > 0)
}