pub struct ListOffsetsService;Expand description
A Service using Storage as Context taking ListOffsetsRequest returning ListOffsetsResponse.
use rama::{Context, Layer as _, Service, layer::MapStateLayer};
use tansu_sans_io::{
ErrorCode, IsolationLevel, ListOffset, ListOffsetsRequest,
list_offsets_request::{ListOffsetsPartition, ListOffsetsTopic},
};
use tansu_storage::{Error, ListOffsetsService, StorageContainer};
use url::Url;
const HOST: &str = "localhost";
const PORT: i32 = 9092;
const NODE_ID: i32 = 111;
let storage = StorageContainer::builder()
.cluster_id("tansu")
.node_id(NODE_ID)
.advertised_listener(Url::parse(&format!("tcp://{HOST}:{PORT}"))?)
.storage(Url::parse("memory://tansu/")?)
.build()
.await?;
let service = MapStateLayer::new(|_| storage).into_layer(ListOffsetsService);
let topic = "abcba";
let response = service
.serve(
Context::default(),
ListOffsetsRequest::default()
.isolation_level(Some(IsolationLevel::ReadUncommitted.into()))
.replica_id(NODE_ID)
.topics(Some(
[ListOffsetsTopic::default()
.name(topic.into())
.partitions(Some(
[ListOffsetsPartition::default()
.current_leader_epoch(Some(-1))
.max_num_offsets(Some(3))
.partition_index(0)
.timestamp(ListOffset::Earliest.try_into()?)]
.into(),
))]
.into(),
)),
)
.await?;
let topics = response.topics.as_deref().unwrap_or_default();
assert_eq!(1, topics.len());
assert_eq!(topic, topics[0].name);
let partitions = topics[0].partitions.as_deref().unwrap_or_default();
assert_eq!(1, partitions.len());
assert_eq!(0, partitions[0].partition_index);
assert!(partitions[0].old_style_offsets.is_none());
assert_eq!(
ErrorCode::None,
ErrorCode::try_from(partitions[0].error_code)?
);
assert_eq!(Some(-1), partitions[0].timestamp);
assert_eq!(Some(0), partitions[0].offset);
assert_eq!(Some(0), partitions[0].leader_epoch);Trait Implementations§
Source§impl Clone for ListOffsetsService
impl Clone for ListOffsetsService
Source§fn clone(&self) -> ListOffsetsService
fn clone(&self) -> ListOffsetsService
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for ListOffsetsService
impl Debug for ListOffsetsService
Source§impl Default for ListOffsetsService
impl Default for ListOffsetsService
Source§fn default() -> ListOffsetsService
fn default() -> ListOffsetsService
Returns the “default value” for a type. Read more
Source§impl Hash for ListOffsetsService
impl Hash for ListOffsetsService
Source§impl Ord for ListOffsetsService
impl Ord for ListOffsetsService
Source§fn cmp(&self, other: &ListOffsetsService) -> Ordering
fn cmp(&self, other: &ListOffsetsService) -> Ordering
1.21.0 · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Compares and returns the maximum of two values. Read more
Source§impl PartialEq for ListOffsetsService
impl PartialEq for ListOffsetsService
Source§impl PartialOrd for ListOffsetsService
impl PartialOrd for ListOffsetsService
Source§impl<G> Service<G, ListOffsetsRequest> for ListOffsetsServicewhere
G: Storage,
impl<G> Service<G, ListOffsetsRequest> for ListOffsetsServicewhere
G: Storage,
impl Copy for ListOffsetsService
impl Eq for ListOffsetsService
impl StructuralPartialEq for ListOffsetsService
Auto Trait Implementations§
impl Freeze for ListOffsetsService
impl RefUnwindSafe for ListOffsetsService
impl Send for ListOffsetsService
impl Sync for ListOffsetsService
impl Unpin for ListOffsetsService
impl UnsafeUnpin for ListOffsetsService
impl UnwindSafe for ListOffsetsService
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<Q, K> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
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