mod paged;
mod query;
mod rows;
use crate::{error::Error, traits::EntityKind, types::Id};
use icydb_core::db::{
EntityResponse as CoreEntityResponse, ResponseCardinalityExt as CoreResponseCardinalityExt,
};
pub use icydb_core::db::{ExecutionTrace, GroupedRow};
pub use paged::{PagedGroupedResponse, PagedResponse};
pub use query::QueryResponse;
pub use rows::{RowProjectionOutput, render_output_value_text};
#[derive(Debug)]
pub struct Response<E: EntityKind> {
inner: CoreEntityResponse<E>,
}
impl<E: EntityKind> Response<E> {
#[must_use]
pub(crate) const fn from_core(inner: CoreEntityResponse<E>) -> Self {
Self { inner }
}
#[must_use]
pub const fn count(&self) -> u32 {
self.inner.count()
}
#[must_use]
pub const fn exists(&self) -> bool {
!self.inner.is_empty()
}
pub fn require_one(&self) -> Result<(), Error> {
CoreResponseCardinalityExt::require_one(&self.inner).map_err(Into::into)
}
pub fn require_some(&self) -> Result<(), Error> {
CoreResponseCardinalityExt::require_some(&self.inner).map_err(Into::into)
}
pub fn entity(self) -> Result<E, Error> {
CoreResponseCardinalityExt::entity(self.inner).map_err(Into::into)
}
pub fn try_entity(self) -> Result<Option<E>, Error> {
CoreResponseCardinalityExt::try_entity(self.inner).map_err(Into::into)
}
#[must_use]
pub fn entities(self) -> Vec<E> {
self.inner.entities()
}
pub fn id(self) -> Result<Id<E>, Error> {
CoreResponseCardinalityExt::id(self.inner).map_err(Into::into)
}
pub fn try_id(self) -> Result<Option<Id<E>>, Error> {
CoreResponseCardinalityExt::try_row(self.inner)
.map(|row| row.map(|entry| entry.id()))
.map_err(Into::into)
}
pub fn ids(&self) -> impl Iterator<Item = Id<E>> + '_ {
self.inner.ids()
}
pub fn contains_id(&self, id: &Id<E>) -> bool {
self.inner.contains_id(id)
}
}