sea-orm-ffi 0.1.3

Compatibility layer for Sea-ORM when crossing a Rust-to-Rust FFI boundary
Documentation
use crate::{backend::FfiBackend, string::StringPtr, value::FfiValue, vec::VecPtr};
use sea_orm::{Statement, Values};

#[repr(C)]
pub(crate) struct FfiStatement {
	sql: StringPtr,
	values_none: bool,
	values: VecPtr<FfiValue>,
	backend: FfiBackend
}

impl From<Statement> for FfiStatement {
	fn from(stmt: Statement) -> Self {
		Self {
			sql: stmt.sql.into(),
			values_none: stmt.values.is_none(),
			values: stmt
				.values
				.map(|values| values.0)
				.unwrap_or_default()
				.into_iter()
				.map(Into::into)
				.collect::<Vec<FfiValue>>()
				.into(),
			backend: stmt.db_backend.into()
		}
	}
}

impl From<FfiStatement> for Statement {
	fn from(stmt: FfiStatement) -> Self {
		Self {
			sql: stmt.sql.into(),
			values: if stmt.values_none {
				None
			} else {
				Some(Values(
					stmt.values.into_vec().into_iter().map(Into::into).collect()
				))
			},
			db_backend: stmt.backend.into()
		}
	}
}