@@ -6,6 +6,7 @@ use crate::future::CassFuture;
66use crate :: retry_policy:: CassRetryPolicy ;
77use crate :: retry_policy:: RetryPolicy :: * ;
88use crate :: ssl:: CassSsl ;
9+ use crate :: timestamp_generator:: CassTimestampGen ;
910use crate :: types:: * ;
1011use crate :: uuid:: CassUuid ;
1112use openssl:: ssl:: SslContextBuilder ;
@@ -19,6 +20,7 @@ use scylla::policies::load_balancing::{
1920} ;
2021use scylla:: policies:: retry:: RetryPolicy ;
2122use scylla:: policies:: speculative_execution:: SimpleSpeculativeExecutionPolicy ;
23+ use scylla:: policies:: timestamp_generator:: TimestampGenerator ;
2224use scylla:: routing:: ShardAwarePortRange ;
2325use scylla:: statement:: { Consistency , SerialConsistency } ;
2426use std:: collections:: HashMap ;
@@ -466,6 +468,33 @@ pub unsafe extern "C" fn cass_cluster_set_tcp_keepalive(
466468 cluster. session_builder . config . tcp_keepalive_interval = tcp_keepalive_interval;
467469}
468470
471+ #[ unsafe( no_mangle) ]
472+ pub unsafe extern "C" fn cass_cluster_set_timestamp_gen (
473+ cluster_raw : CassBorrowedExclusivePtr < CassCluster , CMut > ,
474+ timestamp_gen_raw : CassBorrowedSharedPtr < CassTimestampGen , CMut > ,
475+ ) {
476+ let Some ( cluster) = BoxFFI :: as_mut_ref ( cluster_raw) else {
477+ tracing:: error!( "Provided null cluster pointer to cass_cluster_set_timestamp_gen!" ) ;
478+ return ;
479+ } ;
480+ let Some ( timestamp_gen) = BoxFFI :: as_ref ( timestamp_gen_raw) else {
481+ tracing:: error!(
482+ "Provided null timestamp generator pointer to cass_cluster_set_timestamp_gen!"
483+ ) ;
484+ return ;
485+ } ;
486+
487+ let rust_timestamp_gen: Option < Arc < dyn TimestampGenerator > > = match timestamp_gen {
488+ // In rust-driver, `None` is equivalent to using server-side timestamp generator.
489+ CassTimestampGen :: ServerSide => None ,
490+ CassTimestampGen :: Monotonic ( monotonic_timestamp_generator) => {
491+ Some ( Arc :: clone ( monotonic_timestamp_generator) as _ )
492+ }
493+ } ;
494+
495+ cluster. session_builder . config . timestamp_generator = rust_timestamp_gen;
496+ }
497+
469498#[ unsafe( no_mangle) ]
470499pub unsafe extern "C" fn cass_cluster_set_connection_heartbeat_interval (
471500 cluster_raw : CassBorrowedExclusivePtr < CassCluster , CMut > ,
0 commit comments