pub struct Builder { /* private fields */ }Expand description
Builds a Client. dsn is required up front (this crate never
parses pylon.toml — see the crate-level docs); everything else has a
sensible default.
Implementations§
Source§impl Builder
impl Builder
pub fn new(dsn: impl Into<String>) -> Self
pub fn max_pool_size(self, max_pool_size: usize) -> Self
Sourcepub fn cache(self, path: impl Into<PathBuf>, max_size_mb: usize) -> Self
pub fn cache(self, path: impl Into<PathBuf>, max_size_mb: usize) -> Self
Opts into read-through result caching at an LMDB-backed directory —
mirrors pylon.toml’s [cache] section, minus per-type
([cache.sets.<Name>]) overrides: caching here is a single global
on/off. Omit this entirely for no caching (today’s default
behavior). Only Client’s own query methods read/write the cache —
Transaction never populates it, since rows read inside a
transaction aren’t committed, matching pylon/client.py’s
AsyncTransaction.
This client’s own writes evict the tags they touch, from inside a
transaction too, so a program that writes and then re-reads sees its
own change. Writes from other processes still need a listener on
the same directory (e.g. pylon worker start) to invalidate.
Opens its own LMDB handle for path — heed (the LMDB binding this
crate uses) refuses a second Env::open on the same canonicalized
path while an earlier handle onto it is still alive within the same
process, so a caller building more than one Client that should
share one cache directory (e.g. one per named pylon.toml
connection) must use Builder::cache_handle with one already-open
Arc<pylon_cache::Cache> instead of calling this per client.
Sourcepub fn cache_handle(self, cache: Arc<Cache>) -> Self
pub fn cache_handle(self, cache: Arc<Cache>) -> Self
Like Builder::cache, but attaches to an already-open handle instead
of opening a new one — see that method’s doc comment for why this
exists.
Sourcepub fn build(self) -> Result<Client>
pub fn build(self) -> Result<Client>
Builds the client without touching the database: the connection pool
and the schema snapshot are opened together on first use, or on an
explicit Client::ensure_connected. A Client can therefore be
constructed outside an async context, and a configured-but-never-queried
connection costs nothing.
The cache, when Builder::cache configured one, is opened here —
it’s a local LMDB directory rather than a network resource, and a bad
path is worth failing on at construction rather than on whichever
query happens to run first.
A process that wants a bad DSN/host/credentials — or a database where
neither pylon migration apply nor pylon migration watch has ever
run, so there is no schema snapshot to fetch — to fail at startup
instead of on its first query should call Client::ensure_connected
right after this.
Auto Trait Implementations§
impl Freeze for Builder
impl RefUnwindSafe for Builder
impl Send for Builder
impl Sync for Builder
impl Unpin for Builder
impl UnsafeUnpin for Builder
impl UnwindSafe for Builder
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.