#![cfg_attr(docsrs, feature(doc_cfg))]
#![warn(missing_docs)]
#[cfg(all(feature = "all-drivers", feature = "postgres-only"))]
compile_error!("You cannot enable postgres-only with other drivers active");
pub use rorm_db::{Database, DatabaseConfiguration, DatabaseDriver, Error, Row};
pub use crate::model::{Model, Patch};
#[cfg(feature = "cli")]
pub mod cli {
pub use rorm_cli::*;
}
pub mod db {
pub use rorm_db::*;
}
#[doc(hidden)] pub use linkme;
pub use rorm_declaration::config;
#[doc(hidden)] pub use rorm_declaration::imr;
pub mod prelude {
pub use rorm_macro::{DbEnum, Model, Patch};
pub use crate::field;
pub use crate::fields::types::{BackRef, ForeignModel, ForeignModelByField};
pub use crate::model::{Model, Patch};
}
pub use crate::crud::delete::delete;
pub use crate::crud::insert::insert;
pub use crate::crud::query::query;
pub use crate::crud::update::update;
pub mod conditions;
pub mod crud;
pub mod fields;
pub mod internal;
pub mod model;
#[allow(non_camel_case_types)]
#[linkme::distributed_slice]
#[doc(hidden)]
pub static MODELS: [fn() -> imr::Model] = [..];
pub fn write_models(writer: &mut impl std::io::Write) -> Result<(), serde_json::Error> {
let imf = imr::InternalModelFormat {
models: MODELS.iter().map(|func| func()).collect(),
};
serde_json::to_writer(writer, &imf)
}
pub fn print_models() -> Result<(), serde_json::Error> {
write_models(&mut std::io::stdout())
}
#[doc(hidden)]
pub(crate) mod private {
pub trait Private {}
impl Private for () {}
}
#[macro_export]
macro_rules! sealed {
(trait) => {
fn _not_implementable<Private: $crate::private::Private>();
};
(impl) => {
fn _not_implementable<Private: $crate::private::Private>() {}
};
}
#[doc(hidden)]
#[macro_export]
macro_rules! get_field {
($patch:ty, $field:ident) => {
<<$patch as $crate::model::Patch>::Model as $crate::model::FieldByIndex<
{
$crate::fields::proxy::index(|| {
$crate::internal::patch::model_fields::<<Self as $crate::model::Patch>::Model>()
.$field
})
},
>>::Field
};
}
#[macro_export]
macro_rules! field {
($model:ident.$field:ident) => {
<$model as $crate::model::FieldByIndex<
{ $crate::fields::proxy::index(|| $model.$field) },
>>::Field
};
($model:ident::F.$field:ident) => {
<$model as $crate::model::FieldByIndex<
{ $crate::fields::proxy::index(|| $model::F.$field) },
>>::Field
};
}
#[deprecated(note = "Use `write_models` or `print_models` to implement it yourself")]
pub use rorm_macro::rorm_main;
pub use rorm_macro::DbEnum;
pub use rorm_macro::Model;
pub use rorm_macro::Patch;