pub struct ABTest {
pub id: String,
pub config: ABTestConfig,
pub status: ABTestStatus,
pub created_at: DateTime<Utc>,
pub started_at: Option<DateTime<Utc>>,
pub completed_at: Option<DateTime<Utc>>,
pub control_metrics: VariantMetrics,
pub treatment_metrics: VariantMetrics,
/* private fields */
}Expand description
An A/B test experiment
Fields§
§id: StringUnique test identifier (shortcut to config.id)
config: ABTestConfigConfiguration
status: ABTestStatusCurrent status
created_at: DateTime<Utc>When the test was created
started_at: Option<DateTime<Utc>>When the test started running
completed_at: Option<DateTime<Utc>>When the test completed
control_metrics: VariantMetricsMetrics for control group
treatment_metrics: VariantMetricsMetrics for treatment group
Implementations§
Source§impl ABTest
impl ABTest
Sourcepub fn builder(name: &str) -> ABTestBuilder
pub fn builder(name: &str) -> ABTestBuilder
Create a new A/B test builder
Sourcepub fn from_config(config: ABTestConfig) -> Self
pub fn from_config(config: ABTestConfig) -> Self
Create from config
Sourcepub fn get_variant(&mut self, user_id: &str) -> ABTestVariant
pub fn get_variant(&mut self, user_id: &str) -> ABTestVariant
Get variant for a user (consistent assignment)
Sourcepub fn get_weights(&self, variant: ABTestVariant) -> &LearnedWeights
pub fn get_weights(&self, variant: ABTestVariant) -> &LearnedWeights
Get weights for a variant
Sourcepub fn get_metrics(&self, variant: ABTestVariant) -> &VariantMetrics
pub fn get_metrics(&self, variant: ABTestVariant) -> &VariantMetrics
Get metrics for a variant
Sourcepub fn record_impression(
&mut self,
user_id: &str,
relevance_score: f64,
latency_us: u64,
)
pub fn record_impression( &mut self, user_id: &str, relevance_score: f64, latency_us: u64, )
Record an impression
Sourcepub fn record_click(&mut self, user_id: &str, memory_id: Uuid)
pub fn record_click(&mut self, user_id: &str, memory_id: Uuid)
Record a click/interaction
Sourcepub fn record_feedback(&mut self, user_id: &str, positive: bool)
pub fn record_feedback(&mut self, user_id: &str, positive: bool)
Record explicit feedback
Sourcepub fn has_sufficient_data(&self) -> bool
pub fn has_sufficient_data(&self) -> bool
Check if test has enough data for analysis
Sourcepub fn is_expired(&self) -> bool
pub fn is_expired(&self) -> bool
Check if test has exceeded max duration
Trait Implementations§
Source§impl<'de> Deserialize<'de> for ABTest
impl<'de> Deserialize<'de> for ABTest
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Auto Trait Implementations§
impl Freeze for ABTest
impl RefUnwindSafe for ABTest
impl Send for ABTest
impl Sync for ABTest
impl Unpin for ABTest
impl UnsafeUnpin for ABTest
impl UnwindSafe for ABTest
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Converts
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Converts
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Converts
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Converts
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more