pub mod dalle;
use std::sync::mpsc;
use std::thread;
pub type Canvas = Vec<Vec<[u8; 3]>>;
pub struct GenerationResult {
pub canvas: Canvas,
pub model: String,
}
pub struct FramesResult {
pub frames: Vec<Canvas>,
pub model: String,
}
pub fn generate_async(
prompt: String,
api_key: String,
model: String,
) -> mpsc::Receiver<Result<GenerationResult, String>> {
let (tx, rx) = mpsc::channel();
thread::spawn(move || {
let result = dalle::generate(&prompt, &api_key, &model);
let _ = tx.send(result);
});
rx
}
pub fn generate_frames_async(
prompt: String,
api_key: String,
model: String,
) -> mpsc::Receiver<Result<FramesResult, String>> {
let (tx, rx) = mpsc::channel();
thread::spawn(move || {
match dalle::generate_spritesheet(&prompt, &api_key, &model) {
Ok(frames) => {
let _ = tx.send(Ok(FramesResult {
frames,
model: model.to_string(),
}));
}
Err(e) => {
let _ = tx.send(Err(e));
}
}
});
rx
}