pub struct Subject {
pub user_id: Option<String>,
pub timezone: Option<String>,
pub language: Option<String>,
pub ip_address: Option<String>,
pub user_agent: Option<String>,
pub domain_user_id: Option<Uuid>,
pub network_user_id: Option<Uuid>,
pub session_user_id: Option<Uuid>,
}
Expand description
Subject allows you to attach additional information about your application’s environment.
A Subject can be attached to:
- A crate::Tracker, where it will be sent with every Event
- An Event itself, with the Event-level Subject fields taking priority over Tracker-level (if present)
Fields§
§user_id: Option<String>
Unique identifier for user
timezone: Option<String>
The timezone label.
Populates the os_timezone
field.
language: Option<String>
The language set on the device.
Populates the lang
field.
ip_address: Option<String>
Custom IP address. It overrides the IP address used by default.
Populates the user_ipaddress
field.
user_agent: Option<String>
Custom user-agent. It overrides the user-agent used by default.
Populates the useragent
field.
domain_user_id: Option<Uuid>
Domain user ID (UUIDv4).
Populates the domain_userid
field.
Typically used to link native tracking to in-app browser events tracked using the JavaScript Tracker.
network_user_id: Option<Uuid>
Network user ID (UUIDv4).
Populates the network_userid
field.
Typically used to link native tracking to in-app browser events tracked using the JavaScript Tracker.
Normally one would retrieve the network userid from the browser and pass it to the app.
session_user_id: Option<Uuid>
Session user ID (UUIDv4)
Unique identifier (UUID) for this visit of this user_id to this domain
Implementations§
Source§impl Subject
impl Subject
pub fn builder() -> SubjectBuilder
Sourcepub fn merge(self, other: Subject) -> Self
pub fn merge(self, other: Subject) -> Self
Merges another instance of Subject, with self taking priority
Also useful in conjunction with Tracker.subject_mut to update the subject field, without replacing
§Example
use snowplow_tracker::Subject;
let priority_subject = Subject::builder().user_id("user_1").build().unwrap();
let subject_to_merge = Subject::builder().user_id("user_2").language("en-gb").build().unwrap();
let merged_subject = priority_subject.merge(subject_to_merge);
assert_eq!(merged_subject.user_id, Some("user_1".to_string()));
assert_eq!(merged_subject.language, Some("en-gb".to_string()));