pub struct PhotonBuilder { /* private fields */ }Expand description
Builder for constructing Photon runtimes.
Wire a StoragePort (or accept the default in-process port), optionally install inventory
discovery and ops telemetry, then build. Keep the returned Photon handle
for publish_on / subscribe_on.
| Mode | Typical wiring |
|---|---|
| Mode 1 — Embedded | Default builder, or storage_port with SQLite |
| Mode 2 — Brokered | storage_port with NATS/Kafka/Fluvio on every binary |
Getting started: Mode 1, Mode 2.
§Examples
Default mem path (loads PHOTON_TRANSPORT_KEY via TransportCrypto::from_env):
use photon_runtime::Photon;
let _photon = Photon::builder().auto_registry().build()?;Explicit storage port:
use std::sync::Arc;
use photon_backend::{InProcStoragePort, StoragePort, TransportCrypto};
use photon_runtime::Photon;
let port: Arc<dyn StoragePort> = Arc::new(InProcStoragePort::new(
TransportCrypto::from_env()?,
));
let _photon = Photon::builder().storage_port(port).auto_registry().build()?;Implementations§
Source§impl PhotonBuilder
impl PhotonBuilder
Sourcepub fn storage_port(self, port: Arc<dyn StoragePort>) -> Self
pub fn storage_port(self, port: Arc<dyn StoragePort>) -> Self
Explicit storage port (defaults to in-process mem via InProcStoragePort).
Use this for SQLite (Mode 1 durable) and for broker adapters (Mode 2 — same port config on
publisher and worker). See
Getting started → Mode 2.
§Example
use std::sync::Arc;
use photon_backend::{InProcStoragePort, StoragePort, TransportCrypto};
use photon_runtime::Photon;
let port: Arc<dyn StoragePort> = Arc::new(InProcStoragePort::new(
TransportCrypto::from_env()?,
));
let _photon = Photon::builder().storage_port(port).auto_registry().build()?;Sourcepub fn backend(self, backend: Arc<dyn PhotonBackend>) -> Self
pub fn backend(self, backend: Arc<dyn PhotonBackend>) -> Self
Pre-built backend instance.
Prefer storage_port for normal hosts. Use this when you already
constructed a PhotonBackend (tests, custom delivery stacks).
§Errors
build returns an error if both this and backend_with_context
are set.
Sourcepub fn backend_with_context<F>(self, install: F) -> Self
pub fn backend_with_context<F>(self, install: F) -> Self
Build backend from shared BackendContext (custom install closures).
Prefer storage_port for adapter wiring. This is for hosts that
install a custom PhotonBackend from the registry context.
§Example
use std::sync::Arc;
use photon_backend::{BackendContext, EmbeddedBackend};
use photon_runtime::Photon;
let _photon = Photon::builder()
.backend_with_context(|ctx: BackendContext| EmbeddedBackend::install_mem(ctx))
.auto_registry()
.build()?;Sourcepub fn mem_backend(self) -> Self
pub fn mem_backend(self) -> Self
Shorthand for backend_with_context with
EmbeddedBackend::install_mem.
Equivalent to the default path when you also omit storage_port
(in-process mem). Prefer the default build unless you need an explicit
install fn.
§Example
use photon_runtime::Photon;
let _photon = Photon::builder().mem_backend().auto_registry().build()?;Sourcepub fn ops_log_arc(self, log: Arc<dyn OpsLog>) -> Self
pub fn ops_log_arc(self, log: Arc<dyn OpsLog>) -> Self
Install a shared OpsLog trait object before build.
Sourcepub const fn auto_registry(self) -> Self
pub const fn auto_registry(self) -> Self
Discover #[photon::topic] / #[photon::subscribe] descriptors via Quark inventory.
Required when using the macros in the same crate graph as the host. Without this, the topic registry stays empty and the executor has nothing to dispatch.
Runnable: cargo run -p uf-photon --example embedded_mem --features runtime,mem.
Sourcepub fn retention_policy(self, policy: RetentionPolicy) -> Self
pub fn retention_policy(self, policy: RetentionPolicy) -> Self
Override default retention policy (env fallbacks apply for unset fields).
Sourcepub fn retention_hook(self, hook: Arc<dyn RetentionHook>) -> Self
pub fn retention_hook(self, hook: Arc<dyn RetentionHook>) -> Self
Host hook for extra subscriptions and legal-hold floors.
Sourcepub fn build(self) -> Result<Photon>
pub fn build(self) -> Result<Photon>
Assemble the Photon runtime.
§Defaults
- Storage port:
InProcStoragePortwithTransportCrypto::from_envwhenstorage_portwas not set — requiresPHOTON_TRANSPORT_KEY - Backend: generic backend over that port when no custom
backend/backend_with_contextis set - Registry: empty unless
auto_registrywas called
§Errors
Returns an error if transport crypto cannot load from the environment, a custom install
fn fails, or both backend and backend_with_context were set.