lm-studio-api-extended 0.1.3

Unofficial Rust client for LM Studio with text embedding support.
Documentation
use core::fmt;
use std::str::FromStr;
use serde_json;

use crate::prelude::*;
use super::*;


#[derive(Debug)]
pub struct ParseEmbeddingDataError(String);

impl fmt::Display for ParseEmbeddingDataError {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        write!(f, "Failed to parse EmbeddingData: {}", self.0)
    }
}

impl std::error::Error for ParseEmbeddingDataError {}


#[derive(Serialize, Deserialize, Clone)]
pub struct EmbeddingData {
    pub object: String,
    pub data: Vec<EmbeddingResponse>,
    pub model: String,
    pub usage: EmbeddingUsage
}

impl FromStr for EmbeddingData {
    type Err = ParseEmbeddingDataError;

    fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
        serde_json::from_str(s)
            .map_err(|e: serde_json::Error| ParseEmbeddingDataError(e.to_string()))
    }
}

impl fmt::Display for EmbeddingData {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        match serde_json::to_string_pretty(self) {
            Ok(s) => write!(f, "{}", s),
            Err(e) => write!(f, "<failed to display EmbeddingData: {}>", e)
        }
    }
}