use crate::{
string::StringPtr,
value::FfiValue,
vec::{OptionalVecPtr, VecPtr}
};
use sea_orm::{ProxyRow, QueryResult, from_query_result_to_proxy_row};
pub(crate) type FfiOptionalProxyRow = OptionalVecPtr<FfiProxyRowEntry>;
pub(crate) type FfiProxyRow = VecPtr<FfiProxyRowEntry>;
#[repr(C)]
pub(crate) struct FfiProxyRowEntry {
key: StringPtr,
value: FfiValue
}
impl From<ProxyRow> for FfiProxyRow {
fn from(row: ProxyRow) -> Self {
row.into_column_value_tuples()
.map(|(key, value)| FfiProxyRowEntry {
key: key.into(),
value: value.into()
})
.collect::<Vec<FfiProxyRowEntry>>()
.into()
}
}
impl From<&QueryResult> for FfiProxyRow {
fn from(result: &QueryResult) -> Self {
from_query_result_to_proxy_row(result).into()
}
}
impl From<QueryResult> for FfiProxyRow {
fn from(result: QueryResult) -> Self {
Self::from(&result)
}
}
impl From<FfiProxyRow> for ProxyRow {
fn from(row: FfiProxyRow) -> Self {
Self::new(
row.into_vec()
.into_iter()
.map(|entry| (entry.key.into(), entry.value.into()))
.collect()
)
}
}
impl From<FfiProxyRow> for QueryResult {
fn from(row: FfiProxyRow) -> Self {
ProxyRow::from(row).into()
}
}