pub struct Subscriber<T: Sendable> { /* private fields */ }Implementations§
Source§impl<T: Sendable> Subscriber<T>
impl<T: Sendable> Subscriber<T>
Sourcepub async fn next(&mut self) -> Option<T>
pub async fn next(&mut self) -> Option<T>
Examples found in repository?
examples/sub.rs (line 36)
5async fn main() -> anyhow::Result<()> {
6 mt_sea::init_logging();
7
8 let node = Node::create("node2".to_owned()).await?;
9 let mut subber = node
10 .create_subscriber::<msg::String>("/some_topic".to_owned(), 10)
11 .await?;
12 let pubber = node
13 .create_publisher::<msg::String>("/another_topic".to_owned())
14 .await?;
15 let pubber2 = node
16 .create_publisher::<msg::String>("/boring_topic".to_owned())
17 .await?;
18
19 let msg_out = msg::String {
20 data: "sup".to_owned(),
21 };
22
23 let boring_msg = msg::String {
24 data: "🙄".to_owned(),
25 };
26
27 let mut pubbing = tokio::time::interval(std::time::Duration::from_millis(4320));
28
29 tokio::spawn(async move {
30 loop {
31 pubbing.tick().await;
32 pubber2.publish(&boring_msg).await.unwrap();
33 }
34 });
35
36 while let Some(msg) = subber.next().await {
37 println!("Got: {}", &msg.data);
38 pubber.publish(&msg_out).await.unwrap();
39 }
40
41 Ok(())
42}More examples
examples/pub.rs (line 27)
5async fn main() -> anyhow::Result<()> {
6 mt_sea::init_logging();
7
8 let node = Node::create("node1".to_owned()).await?;
9 let pubber = node
10 .create_publisher::<msg::String>("/some_topic".to_owned())
11 .await?;
12 let mut subber = node
13 .create_subscriber::<msg::String>("/another_topic".to_owned(), 10)
14 .await?;
15 let mut subber2 = node
16 .create_subscriber::<msg::String>("/boring_topic".to_owned(), 10)
17 .await?;
18 let mut useless_subber = node
19 .create_subscriber::<msg::String>("/nothing_here".to_owned(), 10)
20 .await?;
21
22 let msg = msg::String {
23 data: "heyhio".to_owned(),
24 };
25
26 tokio::spawn(async move {
27 while useless_subber.next().await.is_some() {
28 log::error!("ehh.. no?");
29 }
30 });
31
32 let mut pubbing = tokio::time::interval(std::time::Duration::from_secs(1));
33 loop {
34 tokio::select! {
35 _ = pubbing.tick() => {
36 pubber.publish(&msg).await?;
37 }
38 msg_in = subber.next() => {
39 match msg_in {
40 Some(msg_in) => {
41 println!("Got: {}", msg_in.data);
42 },
43 None => {
44 break;
45 },
46 }
47 }
48 msg_in = subber2.next() => {
49 match msg_in {
50 Some(msg_in) => {
51 println!("Got: {}", msg_in.data);
52 },
53 None => {
54 break;
55 },
56 }
57 }
58 }
59 }
60
61 Ok(())
62}Trait Implementations§
Auto Trait Implementations§
impl<T> Freeze for Subscriber<T>
impl<T> RefUnwindSafe for Subscriber<T>
impl<T> Send for Subscriber<T>
impl<T> Sync for Subscriber<T>
impl<T> Unpin for Subscriber<T>
impl<T> UnsafeUnpin for Subscriber<T>
impl<T> UnwindSafe for Subscriber<T>
Blanket Implementations§
Source§impl<Source> AccessAs for Source
impl<Source> AccessAs for Source
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
The archived version of the pointer metadata for this type.
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Converts some archived metadata to the pointer metadata for itself.
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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> 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 moreSource§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Returns the layout of the type.
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Returns whether the given value has been niched. Read more
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
Writes data to
out indicating that a T is niched.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.