mod access;
use self::access::{Access, Shared};
mod trace;
#[doc(inline)]
pub use self::trace::{Error, Errors, Location, NoTrace, Report, Trace, TraceImpl, TraceMode};
mod capture;
#[doc(inline)]
pub use self::capture::{Capture, Emit, ErrorMode, Ignore};
mod error_marker;
#[doc(inline)]
pub use self::error_marker::ErrorMarker;
mod default_context;
#[doc(inline)]
pub use self::default_context::{DEFAULT_NESTING_LIMIT, DefaultContext};
mod context_error;
#[doc(inline)]
pub use self::context_error::ContextError;
use crate::Allocator;
#[cfg(feature = "alloc")]
use crate::alloc::Global;
#[cfg(feature = "alloc")]
#[cfg_attr(doc_cfg, doc(cfg(feature = "alloc")))]
#[inline]
pub fn new() -> DefaultContext<Global, NoTrace, Ignore> {
DefaultContext::new()
}
#[inline]
pub fn new_in<A>(alloc: A) -> DefaultContext<A, NoTrace, Ignore>
where
A: Allocator,
{
DefaultContext::new_in(alloc)
}
#[cfg(any(
feature = "storage",
feature = "wire",
feature = "descriptive",
feature = "value",
feature = "json",
feature = "sqlite-jsonb",
feature = "csv"
))]
#[inline(always)]
pub(crate) fn nested<C, O>(cx: C, f: impl FnOnce() -> Result<O, C::Error>) -> Result<O, C::Error>
where
C: crate::Context,
{
cx.enter_nesting()?;
let result = f();
cx.leave_nesting();
result
}