diff --git a/examples/text-embedding.rs b/examples/text-embedding.rs index 7c087e8..6b2f01e 100644 --- a/examples/text-embedding.rs +++ b/examples/text-embedding.rs @@ -35,7 +35,8 @@ async fn main() -> Result<(), Box> { let result = gemini .text_embeddings(&embedding_request, "textembedding-gecko@003") - .await?; + .await? + .into_result()?; println!("Response: {:?}", result); Ok(()) diff --git a/src/types/text_embeddings.rs b/src/types/text_embeddings.rs index 09be2fe..d1d3173 100644 --- a/src/types/text_embeddings.rs +++ b/src/types/text_embeddings.rs @@ -1,5 +1,7 @@ use serde::{Deserialize, Serialize}; +use crate::error::{Error, Result}; + use super::VertexApiError; #[derive(Clone, Debug, Serialize, Deserialize)] @@ -17,12 +19,28 @@ pub struct TextEmbeddingRequestInstance { #[derive(Clone, Debug, Serialize, Deserialize)] #[serde(untagged)] pub enum TextEmbeddingResponse { - Ok { - predictions: Vec, - }, - Error { - error: VertexApiError, - }, + Ok(TextEmbeddingResponseOk), + Error { error: VertexApiError }, +} + +impl TextEmbeddingResponse { + pub fn into_result(self) -> Result { + self.into() + } +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct TextEmbeddingResponseOk { + pub predictions: Vec, +} + +impl From for Result { + fn from(value: TextEmbeddingResponse) -> Self { + match value { + TextEmbeddingResponse::Ok(ok) => Ok(ok), + TextEmbeddingResponse::Error { error } => Err(Error::VertexError(error)), + } + } } #[derive(Clone, Debug, Serialize, Deserialize)]