sea-orm-ffi 0.1.3

Compatibility layer for Sea-ORM when crossing a Rust-to-Rust FFI boundary
Documentation
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()
	}
}