Skip to main content

Client

Struct Client 

Source
pub struct Client { /* private fields */ }
Expand description

A Client facilitates interactions with the PostHog API over HTTP.

Implementations§

Source§

impl Client

Source

pub fn capture(&self, event: Event)

Capture the provided event, sending it to PostHog.

§Parameters
  • event: Event name, distinct ID, properties, timestamp, groups, and optional feature flag state to send.
§Remarks

Fire-and-forget: the event is handed to the background worker, which batches, sends, and retries it. Returns once the event is queued — not once it is delivered, and delivery failures are not surfaced to the caller. Disabled clients and a full queue drop the event (the latter with a single warning).

Source

pub async fn flush(&self)

Flush queued events, returning once the worker has attempted delivery of everything queued before this call. Transient failures are kept for retry (the call still returns without error). A no-op for disabled clients.

Source

pub async fn shutdown(&self)

Flush, stop the background worker, and join it. Idempotent: subsequent calls are no-ops. After shutdown, capture drops events. A no-op for disabled clients.

Source

pub async fn capture_exception<E>(&self, error: &E) -> Result<(), Error>
where E: StdError + ?Sized,

Capture a Rust error personlessly, sending it to PostHog Error Tracking.

The error’s type, message, and full source() chain are sent as $exception_list, with a stacktrace of the capture site attached to the first entry (see ErrorTrackingOptions::capture_stacktrace).

Accepts any std::error::Error, including &dyn Error. A Box<dyn Error> does not implement Error itself, so pass the dereferenced trait object: capture_exception(&*boxed).

To associate the exception with a person or attach custom properties, groups, a fingerprint, or a severity level, use Client::capture_exception_with.

§Examples
let client = posthog_rs::client("phc_project_api_key").await;
let error = std::io::Error::other("checkout failed");

client.capture_exception(&error).await?;
Source

pub async fn capture_exception_with<E>( &self, error: &E, options: CaptureExceptionOptions, ) -> Result<(), Error>
where E: StdError + ?Sized,

Capture a Rust error with optional context, sending it to PostHog Error Tracking.

Set CaptureExceptionOptions::distinct_id to associate the exception with a person; without it the exception is captured personlessly.

§Examples
use posthog_rs::CaptureExceptionOptions;

let client = posthog_rs::client("phc_project_api_key").await;
let error = std::io::Error::other("checkout failed");

client
    .capture_exception_with(
        &error,
        CaptureExceptionOptions::new()
            .distinct_id("user-123")
            .property("route", "/checkout")?,
    )
    .await?;
Source

pub fn capture_batch(&self, events: Vec<Event>, historical_migration: bool)

Capture a collection of events with a single request.

Events are sent to the /batch/ endpoint.

§Parameters
  • events: Events to send in the batch.
  • historical_migration: Set to true to route events to the historical ingestion topic, bypassing the main pipeline.
§Remarks

Fire-and-forget, like Client::capture. The batch is enqueued per event rather than atomically, so if the bounded queue fills partway through, the remaining events are dropped (with the usual single full-queue warning).

Source

pub async fn get_feature_flags<S: Into<String>>( &self, distinct_id: S, groups: Option<HashMap<String, String>>, person_properties: Option<HashMap<String, Value>>, group_properties: Option<HashMap<String, HashMap<String, Value>>>, ) -> Result<(HashMap<String, FlagValue>, HashMap<String, Value>), Error>

Get all remote feature flags and payloads for a user.

For new code, prefer Client::evaluate_flags so flag reads are deduplicated and can be attached to captured events with Event::with_flags.

§Parameters
  • distinct_id: User distinct ID.
  • groups: Optional group keys for group-targeted flags.
  • person_properties: Optional person properties for release conditions.
  • group_properties: Optional group properties for group-targeted release conditions.
§Returns

A tuple of (feature_flags, feature_flag_payloads), each keyed by flag key. Disabled clients return two empty maps.

§Errors

Returns Error::Connection for request failures or non-success HTTP statuses, and Error::Serialization when the response cannot be parsed.

Source

pub async fn get_feature_flag<K: Into<String>, D: Into<String>>( &self, key: K, distinct_id: D, groups: Option<HashMap<String, String>>, person_properties: Option<HashMap<String, Value>>, group_properties: Option<HashMap<String, HashMap<String, Value>>>, ) -> Result<Option<FlagValue>, Error>

👎Deprecated since 0.6.0:

Use Client::evaluate_flags() to fetch a snapshot, then call .get_flag(key) on it. The snapshot deduplicates $feature_flag_called events and supports attaching rich metadata to captured events via Event::with_flags().

Get a specific feature flag value for a user.

§Parameters
  • key: Feature flag key.
  • distinct_id: User distinct ID.
  • groups: Optional group keys for group-targeted flags.
  • person_properties: Optional person properties for release conditions.
  • group_properties: Optional group properties for group-targeted release conditions.
§Returns

Ok(Some(value)) when the flag is returned, Ok(None) when it is not returned or local-only evaluation cannot resolve it.

§Errors

Returns errors from remote /flags requests or response parsing.

Source

pub async fn is_feature_enabled<K: Into<String>, D: Into<String>>( &self, key: K, distinct_id: D, groups: Option<HashMap<String, String>>, person_properties: Option<HashMap<String, Value>>, group_properties: Option<HashMap<String, HashMap<String, Value>>>, ) -> Result<bool, Error>

👎Deprecated since 0.6.0:

Use Client::evaluate_flags() to fetch a snapshot, then call .is_enabled(key) on it. The snapshot deduplicates $feature_flag_called events and supports attaching rich metadata to captured events via Event::with_flags().

Check if a feature flag is enabled for a user.

§Returns

true for FlagValue::Boolean(true) or any multivariate variant, false for disabled or missing flags.

§Errors

Returns errors from Client::get_feature_flag.

Source

pub async fn get_feature_flag_payload<K: Into<String>, D: Into<String>>( &self, key: K, distinct_id: D, ) -> Result<Option<Value>, Error>

👎Deprecated since 0.6.0:

Use Client::evaluate_flags() to fetch a snapshot, then call .get_flag_payload(key) on it. Reading the payload from a snapshot is event-free, matching this method’s behavior, and avoids the per-call /flags request.

Get a feature flag payload for a user.

§Parameters
  • key: Feature flag key.
  • distinct_id: User distinct ID.
§Returns

The JSON payload for the flag, if one was returned. This method does not emit $feature_flag_called events.

§Errors

Returns Error::Connection for request failures and Error::Serialization when the response cannot be parsed.

Source

pub fn evaluate_feature_flag_locally( &self, flag: &FeatureFlag, distinct_id: &str, person_properties: &HashMap<String, Value>, groups: &HashMap<String, String>, group_properties: &HashMap<String, HashMap<String, Value>>, ) -> Result<FlagValue, Error>

Evaluate a supplied feature flag definition locally.

groups and group_properties are only consulted when the flag (or one of its conditions) targets a group; pass empty maps for person flags.

§Parameters
  • flag: Feature flag definition to evaluate.
  • distinct_id: User distinct ID.
  • person_properties: Person properties available to release conditions.
  • groups: Group keys for group-targeted flags.
  • group_properties: Group properties for group-targeted release conditions.
§Errors

Returns Error::InconclusiveMatch when the flag cannot be evaluated locally with the supplied context.

Source

pub async fn evaluate_flags<S: Into<String>>( &self, distinct_id: S, options: EvaluateFlagsOptions, ) -> Result<FeatureFlagEvaluations, Error>

Evaluate feature flags for distinct_id, returning a FeatureFlagEvaluations snapshot.

Each is_enabled / get_flag call on the returned snapshot fires a dedup-aware $feature_flag_called event with full metadata, and the snapshot can be passed to Event::with_flags so a downstream Client::capture inherits $feature/<key> and $active_feature_flags without an extra /flags request.

§Parameters
  • distinct_id: User distinct ID. Empty values return an empty snapshot.
  • options: Optional groups, properties, GeoIP override, local-only mode, and flag-key filtering.
§Errors

Returns Error::Connection or Error::Serialization when remote evaluation is required and the /flags request fails before any local results are available.

Trait Implementations§

Source§

impl Drop for Client

Source§

fn drop(&mut self)

Best-effort flush and worker join on drop. A blocking drain (the async shutdown can’t run in a destructor), so dropping a Client inside an async task blocks that executor thread until the drain completes (up to shutdown_timeout_ms plus any in-flight request) — prefer an explicit shutdown().await first, which makes this a no-op.

Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. Read more

Auto Trait Implementations§

§

impl !Freeze for Client

§

impl !RefUnwindSafe for Client

§

impl !UnwindSafe for Client

§

impl Send for Client

§

impl Sync for Client

§

impl Unpin for Client

§

impl UnsafeUnpin for Client

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more