Skip to main content

langchain_rust/schemas/
convert.rs

1pub trait LangchainIntoOpenAI<T>: Sized {
2    fn into_openai(self) -> T;
3}
4
5pub trait LangchainFromOpenAI<T>: Sized {
6    fn from_openai(openai: T) -> Self;
7}
8
9pub trait OpenAiIntoLangchain<T>: Sized {
10    fn into_langchain(self) -> T;
11}
12
13pub trait OpenAIFromLangchain<T>: Sized {
14    fn from_langchain(langchain: T) -> Self;
15}
16
17impl<T, U> LangchainIntoOpenAI<U> for T
18where
19    U: OpenAIFromLangchain<T>,
20{
21    fn into_openai(self) -> U {
22        U::from_langchain(self)
23    }
24}
25
26impl<T, U> OpenAiIntoLangchain<U> for T
27where
28    U: LangchainFromOpenAI<T>,
29{
30    fn into_langchain(self) -> U {
31        U::from_openai(self)
32    }
33}
34
35// Try into and from OpenAI
36
37pub trait TryLangchainIntoOpenAI<T>: Sized {
38    type Error;
39
40    fn try_into_openai(self) -> Result<T, Self::Error>;
41}
42
43pub trait TryLangchainFromOpenAI<T>: Sized {
44    type Error;
45
46    fn try_from_openai(openai: T) -> Result<Self, Self::Error>;
47}
48
49pub trait TryOpenAiIntoLangchain<T>: Sized {
50    type Error;
51
52    fn try_into_langchain(self) -> Result<T, Self::Error>;
53}
54
55pub trait TryOpenAiFromLangchain<T>: Sized {
56    type Error;
57
58    fn try_from_langchain(langchain: T) -> Result<Self, Self::Error>;
59}
60
61impl<T, U> TryLangchainIntoOpenAI<U> for T
62where
63    U: TryOpenAiFromLangchain<T>,
64{
65    type Error = U::Error;
66
67    fn try_into_openai(self) -> Result<U, U::Error> {
68        U::try_from_langchain(self)
69    }
70}
71
72impl<T, U> TryOpenAiIntoLangchain<U> for T
73where
74    U: TryLangchainFromOpenAI<T>,
75{
76    type Error = U::Error;
77
78    fn try_into_langchain(self) -> Result<U, U::Error> {
79        U::try_from_openai(self)
80    }
81}