myst-client 0.1.1

A client library for the Myst network
use jiff::Timestamp;
use serde::{Deserialize, Serialize};
use typed_builder::TypedBuilder;

use crate::transport::NodeId;

#[derive(TypedBuilder, Debug, Serialize, Deserialize)]
pub struct ImageTask {
    pub prompt: String,
    #[builder(default)]
    pub node_id: Option<NodeId>,
    #[builder(default)]
    negative_prompt: Option<String>,
    #[builder(default)]
    size: Option<ImageSize>,
}

#[derive(Serialize, Deserialize)]
pub struct ImageResult {
    /// Base64 encoded image data.
    pub data: String,
    // images: Vec<GeneratedImage>,
    // model: String,
    // created_at: Timestamp,
    // prompt_tokens: usize,
    // total_tokens: usize,
    // latency_ms: u64,
}

#[derive(Serialize, Deserialize)]
pub struct GeneratedImage {
    url: Option<String>,
    data: Option<Vec<u8>>,
    format: ImageFormat,
    width: u32,
    height: u32,
    seed: Option<u64>,
}

#[derive(Serialize, Deserialize)]
pub enum ImageFormat {
    Png,
    Jpeg,
    Webp,
}

#[derive(Serialize, Deserialize, Debug)]
pub struct ImageSize {
    width: u32,
    height: u32,
}