mod event_headers;
mod event_payload;
mod event_payload_builder;
mod prop_value;
use crate::{Error, Plausible};
use bytes::Bytes;
pub use event_headers::*;
pub use event_payload::*;
pub use event_payload_builder::*;
pub use prop_value::*;
use reqwest::{RequestBuilder, StatusCode};
pub const PAGEVIEW_EVENT: &str = "pageview";
impl Plausible {
pub async fn event(
&self,
headers: EventHeaders,
payload: EventPayload,
) -> Result<Bytes, Error> {
let request: RequestBuilder = self
.client
.post(format!("{}/api/event", self.base_url))
.header("Content-Type", "application/json")
.header("User-Agent", headers.user_agent)
.header("X-Forwarded-For", headers.x_forwarded_for);
let response = request.json(&payload).send().await?;
let status_code: StatusCode = response.status();
let bytes = response.bytes().await?;
if !status_code.is_success() {
return Err(Error::RequestFailed { bytes, status_code });
}
Ok(bytes)
}
}