1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
use super::PubNub; use crate::data::channel; use crate::data::object::Object; use crate::data::request; use crate::data::timetoken::Timetoken; use crate::runtime::Runtime; use crate::transport::Transport; impl<TTransport, TRuntime> PubNub<TTransport, TRuntime> where TTransport: Transport + 'static, TRuntime: Runtime + 'static, { /// Publish a message over the PubNub network. /// /// # Errors /// /// Returns transport-specific errors. /// /// # Example /// /// ``` /// # use pubnub_core::mock::{transport::MockTransport, runtime::MockRuntime}; /// # let transport = MockTransport::new(); /// # let runtime = MockRuntime::new(); /// use pubnub_core::{data::channel, json::object, Builder}; /// /// # async { /// let pubnub = Builder::with_components(transport, runtime).build(); /// /// let channel_name: channel::Name = "my-channel".parse().unwrap(); /// let timetoken = pubnub /// .publish( /// channel_name, /// object! { /// "username" => "JoeBob", /// "content" => "Hello, world!", /// }, /// ) /// .await?; /// /// println!("Timetoken: {}", timetoken); /// # Ok::<(), Box<dyn std::error::Error>>(()) /// # }; /// ``` pub async fn publish( &self, channel: channel::Name, message: Object, ) -> Result<Timetoken, <TTransport as Transport>::Error> { let request = request::Publish { channel, meta: None, payload: message, }; self.transport.call(request).await } /// Publish a message over the PubNub network with an extra metadata payload. /// /// # Errors /// /// Returns transport-specific errors. /// /// # Example /// /// ``` /// # use pubnub_core::mock::{transport::MockTransport, runtime::MockRuntime}; /// # let transport = MockTransport::new(); /// # let runtime = MockRuntime::new(); /// use pubnub_core::{data::channel, json::object, Builder}; /// /// # async { /// let pubnub = Builder::with_components(transport, runtime).build(); /// /// let message = object! { /// "username" => "JoeBob", /// "content" => "Hello, world!", /// }; /// let metadata = object! { /// "uuid" => "JoeBob", /// }; /// /// let channel_name: channel::Name = "my-channel".parse().unwrap(); /// let timetoken = pubnub /// .publish_with_metadata(channel_name, message, metadata) /// .await?; /// /// println!("Timetoken: {}", timetoken); /// # Ok::<(), Box<dyn std::error::Error>>(()) /// # }; /// ``` pub async fn publish_with_metadata( &self, channel: channel::Name, message: Object, metadata: Object, ) -> Result<Timetoken, <TTransport as Transport>::Error> { let request = request::Publish { channel, meta: Some(metadata), payload: message, }; self.transport.call(request).await } }