weirdboi_posthog 0.1.0

PostHog analytics integration for Bevy
Documentation
use crate::{Analytics, HogEvent, PosthogConfig, SendAnalyticsExt, track};
use bevy_ecs::system::{ResMut, SystemParam};
use serde_json::json;
use std::fmt::Display;

#[derive(SystemParam)]
pub struct Posthog<'w> {
	config: Option<ResMut<'w, PosthogConfig>>,
	events: ResMut<'w, Analytics>,
}

impl SendAnalyticsExt for Posthog<'_> {
	fn send_analytics(&mut self, event: HogEvent) -> &mut Self {
		self.events.send(event);
		self
	}

	fn send_analytics_batch(&mut self, events: Vec<HogEvent>) -> &mut Self {
		self.events.send_batch(events);
		self
	}
}

impl Posthog<'_> {
	pub fn screen(&mut self, screen_name: impl Display) {
		if let Some(ref mut config) = self.config {
			config.set_property("$screen_name", json!(screen_name.to_string()));
		}

		self.send_analytics(track!("$screen", {
			"$screen_name" => [screen_name.to_string()],
		}));
	}
}