You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iggy.apache.org by "haubur (via GitHub)" <gi...@apache.org> on 2026/09/23 15:20:55 UTC

[PR] chore(sdk): IggyStream API docs [iggy]

haubur opened a new pull request, #4275:
URL: https://github.com/apache/iggy/pull/4275

   **Opened as DRAFT in order to add minor changes stemming from #4249.**
   
   ## Which issue does this PR address?
   Closes #4093
   
   ## Rationale
   Adds IggyStream docs following previous PRs to add crate level docs:
   https://github.com/apache/iggy/pull/3989
   https://github.com/apache/iggy/pull/3913
   https://github.com/apache/iggy/pull/3809
   
   ## Local Execution
   - Passed
   - Pre-commit hooks ran
   
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@iggy.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] chore(sdk): IggyStream API docs [iggy]

Posted by "hubcio (via GitHub)" <gi...@apache.org>.
hubcio commented on PR #4275:
URL: https://github.com/apache/iggy/pull/4275#issuecomment-6170422660

   /skill team-review-slim


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@iggy.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] chore(sdk): IggyStream API docs [iggy]

Posted by "github-actions[bot] (via GitHub)" <gi...@apache.org>.
github-actions[bot] commented on code in PR #4275:
URL: https://github.com/apache/iggy/pull/4275#discussion_r4272064093


##########
core/sdk/src/stream_builder/iggy_stream_consumer.rs:
##########
@@ -21,21 +21,240 @@ use crate::prelude::{IggyError, SystemClient, Validatable};
 use crate::stream_builder::{IggyConsumerConfig, build};
 use tracing::trace;
 
+/// Builds a connected [`IggyConsumer`] from one [`IggyConsumerConfig`].
+///
+/// `IggyStreamConsumer` is a namespace of associated functions. It holds no state, and you never
+/// create a value of it. Use it for a process that only reads from a topic. To build a producer
+/// and a consumer together, use [`IggyStream`].
+///
+/// # Building the consumer
+///
+/// [`build()`](Self::build) takes an [`IggyClient`] that is connected already. It sends a ping
+/// first and fails with [`IggyError::NotConnected`] when that ping fails.
+/// [`with_client_from_url()`](Self::with_client_from_url) creates and connects the client itself,
+/// so it skips the ping and returns the client next to the consumer.
+///
+/// Both functions then create the stream and the topic when [`create_stream_if_not_exists()`] and
+/// [`create_topic_if_not_exists()`] allow it, build the consumer, and await
+/// [`IggyConsumer::init()`]. The consumer comes back initialized and, for a group, joined. You can
+/// read messages right away.
+///
+/// # Reading from a stream that does not exist yet
+///
+/// Both switches are off by default. When the stream or the topic is missing and its switch is
+/// off, the call logs a warning and carries on to [`IggyConsumer::init()`]. That call then retries
+/// [`init_retries()`] times, [`init_interval()`] apart, and fails with
+/// [`IggyError::StreamNameNotFound`] or [`IggyError::TopicNameNotFound`] once the retries are
+/// spent. The default allows five retries three seconds apart, which covers a producer that
+/// creates the topic at the same time.
+///
+/// # What the configuration sets
+///
+/// | Field of [`IggyConsumerConfig`] | Effect |
+/// | --- | --- |
+/// | [`stream_name()`], [`topic_name()`] | what is read |
+/// | [`consumer_name()`] | the name of the consumer, or of the group for [`ConsumerKind::ConsumerGroup`] |
+/// | [`consumer_kind()`] | whether the consumer joins a group or reads one partition alone |
+/// | [`partitions_count()`] | two things, see below |
+/// | [`batch_length()`] | messages fetched per request |
+/// | [`polling_interval()`], [`polling_strategy()`] | how often reading happens, and where it starts |
+/// | [`auto_commit()`] | when offsets are committed |
+/// | [`polling_retry_interval()`] | the wait between attempts while polling is blocked |
+/// | [`init_retries()`], [`init_interval()`] | retries for a missing stream or topic |
+/// | [`encryptor()`] | decrypting payloads and user headers, and it replaces the client's own |
+///
+/// [`partitions_count()`] carries two meanings. It is the partition count of a topic that this
+/// call creates. For [`ConsumerKind::Consumer`] it is also the ID of the single partition the

Review Comment:
   warning: The doc says `partitions_count()` is also the ID of the partition a standalone consumer reads, but `build_iggy_consumer.rs:61` passes `config.partition_id()`, which defaults to 0. Fix: name `partition_id()` and `with_partition_id()` here, and delete the `reads partition 3` example.



##########
core/sdk/src/stream_builder/config/config_iggy_consumer.rs:
##########
@@ -27,6 +27,135 @@ use tracing::error;
 
 const DEFAULT_PARTITION_ID: u32 = 0;
 
+/// Describes the consumer that [`IggyStreamConsumer`] and [`IggyStream`] build.
+///
+/// The value is a plain description. It never talks to the server, and changing it later has no
+/// effect on a consumer that is built already.
+///
+/// # Creating a configuration
+///
+/// | Constructor | Use it for |
+/// | --- | --- |
+/// | [`builder()`](Self::builder) | naming every field you set |
+/// | [`from_stream_topic()`](Self::from_stream_topic) | `ConsumerGroup` for one stream and one topic, with `batch_length` and `polling_interval`, defaults elsewhere |
+/// | [`new()`](Self::new) | every field, positional |
+/// | [`default()`](Self::default) | the stream `test_stream` and the topic `test_topic`, for examples and tests |
+///
+/// The builder requires every field that is not an [`Option`], so

Review Comment:
   nit: The rule says the builder requires every field that is not an `Option`, but `partition_id` has `#[builder(default = DEFAULT_PARTITION_ID)]​` at line 183 and line 45 already lists it as optional. Fix: say that the builder defaults `partition_id` to 0.



##########
core/sdk/src/stream_builder/iggy_stream_consumer.rs:
##########
@@ -21,21 +21,240 @@ use crate::prelude::{IggyError, SystemClient, Validatable};
 use crate::stream_builder::{IggyConsumerConfig, build};
 use tracing::trace;
 
+/// Builds a connected [`IggyConsumer`] from one [`IggyConsumerConfig`].
+///
+/// `IggyStreamConsumer` is a namespace of associated functions. It holds no state, and you never
+/// create a value of it. Use it for a process that only reads from a topic. To build a producer
+/// and a consumer together, use [`IggyStream`].
+///
+/// # Building the consumer
+///
+/// [`build()`](Self::build) takes an [`IggyClient`] that is connected already. It sends a ping
+/// first and fails with [`IggyError::NotConnected`] when that ping fails.
+/// [`with_client_from_url()`](Self::with_client_from_url) creates and connects the client itself,
+/// so it skips the ping and returns the client next to the consumer.
+///
+/// Both functions then create the stream and the topic when [`create_stream_if_not_exists()`] and
+/// [`create_topic_if_not_exists()`] allow it, build the consumer, and await
+/// [`IggyConsumer::init()`]. The consumer comes back initialized and, for a group, joined. You can
+/// read messages right away.
+///
+/// # Reading from a stream that does not exist yet
+///
+/// Both switches are off by default. When the stream or the topic is missing and its switch is
+/// off, the call logs a warning and carries on to [`IggyConsumer::init()`]. That call then retries
+/// [`init_retries()`] times, [`init_interval()`] apart, and fails with
+/// [`IggyError::StreamNameNotFound`] or [`IggyError::TopicNameNotFound`] once the retries are
+/// spent. The default allows five retries three seconds apart, which covers a producer that
+/// creates the topic at the same time.
+///
+/// # What the configuration sets
+///
+/// | Field of [`IggyConsumerConfig`] | Effect |
+/// | --- | --- |
+/// | [`stream_name()`], [`topic_name()`] | what is read |
+/// | [`consumer_name()`] | the name of the consumer, or of the group for [`ConsumerKind::ConsumerGroup`] |
+/// | [`consumer_kind()`] | whether the consumer joins a group or reads one partition alone |
+/// | [`partitions_count()`] | two things, see below |
+/// | [`batch_length()`] | messages fetched per request |
+/// | [`polling_interval()`], [`polling_strategy()`] | how often reading happens, and where it starts |
+/// | [`auto_commit()`] | when offsets are committed |
+/// | [`polling_retry_interval()`] | the wait between attempts while polling is blocked |
+/// | [`init_retries()`], [`init_interval()`] | retries for a missing stream or topic |
+/// | [`encryptor()`] | decrypting payloads and user headers, and it replaces the client's own |
+///
+/// [`partitions_count()`] carries two meanings. It is the partition count of a topic that this
+/// call creates. For [`ConsumerKind::Consumer`] it is also the ID of the single partition the
+/// consumer reads, so a standalone consumer of a topic with three partitions reads partition 3 and
+/// nothing else. Run one consumer per partition to cover such a topic, or use
+/// [`ConsumerKind::ConsumerGroup`] and let the server divide the partitions.
+///
+/// A consumer built here always creates its group when the group is missing, and always joins it.
+/// Build through [`IggyClient::consumer()`] or [`IggyClient::consumer_group()`] when you need to
+/// pick the partition and the group name apart, to replay messages, or to join the group yourself.
+///
+/// # Defaults worth knowing
+///
+/// [`IggyConsumerConfig`] does not repeat the defaults of [`IggyConsumerBuilder`]:
+///
+/// | Option | [`IggyConsumerConfig`] | [`IggyConsumerBuilder`] |
+/// | --- | --- | --- |
+/// | [`polling_strategy()`] | [`PollingStrategy::last()`], so every poll starts [`batch_length()`] messages back from the end of the partition | [`PollingStrategy::next()`] |

Review Comment:
   nit: The cell says every poll starts `batch_length()` messages back from the end, but only the first poll of a partition does, and later polls continue from the consumer's tracked offset. Fix: say `the first poll of a partition`, here and at config_iggy_consumer.rs:304.



##########
core/sdk/src/stream_builder/config/config_iggy_producer.rs:
##########
@@ -23,6 +23,95 @@ use bon::Builder;
 use std::str::FromStr;
 use std::sync::Arc;
 
+/// Describes the producer that [`IggyStreamProducer`] and [`IggyStream`] build.
+///
+/// The value is a plain description. It never talks to the server, and changing it later has no
+/// effect on a producer that is built already.
+///
+/// # Creating a configuration
+///
+/// | Constructor | Use it for |
+/// | --- | --- |
+/// | [`builder()`](Self::builder) | naming every field you set |
+/// | [`from_stream_topic()`](Self::from_stream_topic) | one stream and one topic, defaults elsewhere |
+/// | [`new()`](Self::new) | every field, positional |
+/// | [`default()`](Self::default) | the stream `test_stream` and the topic `test_topic`, for examples and tests |
+///
+/// The builder requires every field that is not an [`Option`], so it requires
+/// [`stream_name()`](Self::stream_name), [`topic_name()`](Self::topic_name),
+/// [`topic_partitions_count()`](Self::topic_partitions_count),
+/// [`batch_length()`](Self::batch_length), [`linger_time()`](Self::linger_time) and
+/// [`partitioning()`](Self::partitioning).
+///
+/// # Fields and defaults
+///
+/// The defaults below are what [`default()`](Self::default) and
+/// [`from_stream_topic()`](Self::from_stream_topic) set. The builder has no defaults.

Review Comment:
   nit: `topic_durability` carries `#[builder(default)]​` at line 126, so the builder does have a default, and the fields table below omits that field. Fix: add the `topic_durability()` row with its `Durability::Replicated` default, and say which fields the builder defaults.



##########
core/sdk/src/stream_builder/config/config_iggy_producer.rs:
##########
@@ -69,23 +157,32 @@ impl Default for IggyProducerConfig {
 }
 
 impl IggyProducerConfig {
-    /// Creates a new `IggyProducerConfig` with all fields defined.
+    /// Return a new instance of a `IggyConsumerConfig`.

Review Comment:
   nit: `IggyProducerConfig::new()` returns an `IggyProducerConfig`, but its new doc says `IggyConsumerConfig`. Fix: write the producer type in that sentence.



##########
core/sdk/src/stream_builder/config/config_iggy_stream.rs:
##########
@@ -76,13 +181,31 @@ impl IggyStreamConfig {
         })
     }
 
+    /// Returns the half that describes the consumer.
     pub fn consumer_config(&self) -> &IggyConsumerConfig {
         &self.consumer_config
     }
 
+    /// Returns the half that describes the producer.
     pub fn producer_config(&self) -> &IggyProducerConfig {
         &self.producer_config
     }
+
+    /// Returns the stream name of the producer half.
+    ///
+    /// The consumer half carries its own, which can differ. Read
+    /// [`consumer_config()`](Self::consumer_config) for it.
+    pub fn stream_name(&self) -> &str {

Review Comment:
   simplification: `stream_name()` and `topic_name()` only forward to the producer half, and the plain names hide which half answers when the two halves differ. Fix: drop both and read `producer_config().stream_name()`, as examples/rust/src/stream-builder/stream-basic/main.rs:64 does.



##########
core/sdk/src/stream_builder/config/config_iggy_consumer.rs:
##########
@@ -206,65 +368,87 @@ impl IggyConsumerConfig {
         self
     }
 
+    /// Returns the name of the stream that is read.
     pub fn stream_name(&self) -> &str {
         &self.stream_name
     }
 
+    /// Returns the name of the topic that is read.
     pub fn topic_name(&self) -> &str {
         &self.topic_name
     }
 
+    /// Returns when the consumer commits an offset by itself.
     pub fn auto_commit(&self) -> AutoCommit {
         self.auto_commit
     }
 
+    /// Returns how many messages one request fetches at most.
     pub fn batch_length(&self) -> u32 {
         self.batch_length
     }
+
+    /// Returns whether the build creates the stream when it is missing.
     pub fn create_stream_if_not_exists(&self) -> bool {
         self.create_stream_if_not_exists
     }
 
+    /// Returns whether the build creates the topic when it is missing.
     pub fn create_topic_if_not_exists(&self) -> bool {
         self.create_topic_if_not_exists
     }
 
+    /// Returns the name of the consumer, or of its group.
     pub fn consumer_name(&self) -> &str {
         &self.consumer_name
     }
 
+    /// Returns whether the consumer joins a group or reads one partition alone.
     pub fn consumer_kind(&self) -> ConsumerKind {
         self.consumer_kind
     }
 
+    /// Returns the smallest gap the consumer keeps between two requests.
     pub fn polling_interval(&self) -> IggyDuration {
         self.polling_interval
     }
 
+    /// Returns where reading each partition starts.
     pub fn polling_strategy(&self) -> PollingStrategy {
         self.polling_strategy
     }
 
+    /// Returns how many partitions a topic created by the build gets.
+    ///
+    /// For [`ConsumerKind::Consumer`] this is also the ID of the single partition that the

Review Comment:
   warning: The getter repeats the false claim that `partitions_count()` is the read partition, while the build passes `config.partition_id()` and the callout above at line 72 says so. Fix: delete the second paragraph and keep the callout.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@iggy.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] chore(sdk): IggyStream API docs [iggy]

Posted by "haubur (via GitHub)" <gi...@apache.org>.
haubur commented on PR #4275:
URL: https://github.com/apache/iggy/pull/4275#issuecomment-6186983058

   /ready


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@iggy.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] chore(sdk): IggyStream API docs [iggy]

Posted by "justinmclean (via GitHub)" <gi...@apache.org>.
justinmclean commented on PR #4275:
URL: https://github.com/apache/iggy/pull/4275#issuecomment-6302246429

   @hubcio the review fixes went in, could you take a look when you have time?


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@iggy.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] chore(sdk): IggyStream API docs [iggy]

Posted by "justinmclean (via GitHub)" <gi...@apache.org>.
justinmclean commented on PR #4275:
URL: https://github.com/apache/iggy/pull/4275#issuecomment-5991129526

   @haubur CI is red on one doctest: the example on `IggyConsumerConfig::new` (core/sdk/src/stream_builder/config/config_iggy_consumer.rs, line 245) has an unclosed delimiter. The other Rust jobs were cancelled because of it, so fixing that example should turn the run green.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@iggy.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] chore(sdk): IggyStream API docs [iggy]

Posted by "codecov[bot] (via GitHub)" <gi...@apache.org>.
codecov[bot] commented on PR #4275:
URL: https://github.com/apache/iggy/pull/4275#issuecomment-5799341037

   ## [Codecov](https://app.codecov.io/gh/apache/iggy/pull/4275?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) Report
   :white_check_mark: All modified and coverable lines are covered by tests.
   :white_check_mark: Project coverage is 87.33%. Comparing base ([`20d3237`](https://app.codecov.io/gh/apache/iggy/commit/20d3237935eafeb0eff72f1402ca7a0b1c7d2a65?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)) to head ([`8d395c9`](https://app.codecov.io/gh/apache/iggy/commit/8d395c9e9344e316ffc7dad93aed18cf153a8af4?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)).
   
   <details><summary>Additional details and impacted files</summary>
   
   
   
   ```diff
   @@             Coverage Diff              @@
   ##             master    #4275      +/-   ##
   ============================================
   - Coverage     87.65%   87.33%   -0.32%     
     Complexity     1575     1575              
   ============================================
     Files          1284     1282       -2     
     Lines        225457   225209     -248     
     Branches     188820   188781      -39     
   ============================================
   - Hits         197625   196687     -938     
   - Misses        23102    23786     +684     
   - Partials       4730     4736       +6     
   ```
   
   | [Components](https://app.codecov.io/gh/apache/iggy/pull/4275/components?src=pr&el=components&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | Coverage Δ | |
   |---|---|---|
   | [Rust Core](https://app.codecov.io/gh/apache/iggy/pull/4275/components?src=pr&el=component&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `88.76% <ø> (ø)` | |
   | [Java SDK](https://app.codecov.io/gh/apache/iggy/pull/4275/components?src=pr&el=component&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `68.68% <ø> (ø)` | |
   | [C# SDK](https://app.codecov.io/gh/apache/iggy/pull/4275/components?src=pr&el=component&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `77.35% <ø> (ø)` | |
   | [Python SDK](https://app.codecov.io/gh/apache/iggy/pull/4275/components?src=pr&el=component&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `90.97% <ø> (ø)` | |
   | [PHP SDK](https://app.codecov.io/gh/apache/iggy/pull/4275/components?src=pr&el=component&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `85.67% <ø> (ø)` | |
   | [Node SDK](https://app.codecov.io/gh/apache/iggy/pull/4275/components?src=pr&el=component&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `90.78% <ø> (-5.58%)` | :arrow_down: |
   | [Go SDK](https://app.codecov.io/gh/apache/iggy/pull/4275/components?src=pr&el=component&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `70.05% <ø> (ø)` | |
   
   | [Files with missing lines](https://app.codecov.io/gh/apache/iggy/pull/4275?dropdown=coverage&src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | Coverage Δ | |
   |---|---|---|
   | [core/sdk/src/consumer\_ext/consumer\_message\_ext.rs](https://app.codecov.io/gh/apache/iggy/pull/4275?src=pr&el=tree&filepath=core%2Fsdk%2Fsrc%2Fconsumer_ext%2Fconsumer_message_ext.rs&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-Y29yZS9zZGsvc3JjL2NvbnN1bWVyX2V4dC9jb25zdW1lcl9tZXNzYWdlX2V4dC5ycw==) | `0.00% <ø> (ø)` | |
   | [core/sdk/src/consumer\_ext/mod.rs](https://app.codecov.io/gh/apache/iggy/pull/4275?src=pr&el=tree&filepath=core%2Fsdk%2Fsrc%2Fconsumer_ext%2Fmod.rs&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-Y29yZS9zZGsvc3JjL2NvbnN1bWVyX2V4dC9tb2QucnM=) | `0.00% <ø> (ø)` | |
   | [.../src/stream\_builder/config/config\_iggy\_consumer.rs](https://app.codecov.io/gh/apache/iggy/pull/4275?src=pr&el=tree&filepath=core%2Fsdk%2Fsrc%2Fstream_builder%2Fconfig%2Fconfig_iggy_consumer.rs&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-Y29yZS9zZGsvc3JjL3N0cmVhbV9idWlsZGVyL2NvbmZpZy9jb25maWdfaWdneV9jb25zdW1lci5ycw==) | `97.90% <ø> (ø)` | |
   | [.../src/stream\_builder/config/config\_iggy\_producer.rs](https://app.codecov.io/gh/apache/iggy/pull/4275?src=pr&el=tree&filepath=core%2Fsdk%2Fsrc%2Fstream_builder%2Fconfig%2Fconfig_iggy_producer.rs&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-Y29yZS9zZGsvc3JjL3N0cmVhbV9idWlsZGVyL2NvbmZpZy9jb25maWdfaWdneV9wcm9kdWNlci5ycw==) | `97.34% <ø> (ø)` | |
   | [...dk/src/stream\_builder/config/config\_iggy\_stream.rs](https://app.codecov.io/gh/apache/iggy/pull/4275?src=pr&el=tree&filepath=core%2Fsdk%2Fsrc%2Fstream_builder%2Fconfig%2Fconfig_iggy_stream.rs&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-Y29yZS9zZGsvc3JjL3N0cmVhbV9idWlsZGVyL2NvbmZpZy9jb25maWdfaWdneV9zdHJlYW0ucnM=) | `91.57% <ø> (ø)` | |
   | [core/sdk/src/stream\_builder/iggy\_stream.rs](https://app.codecov.io/gh/apache/iggy/pull/4275?src=pr&el=tree&filepath=core%2Fsdk%2Fsrc%2Fstream_builder%2Figgy_stream.rs&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-Y29yZS9zZGsvc3JjL3N0cmVhbV9idWlsZGVyL2lnZ3lfc3RyZWFtLnJz) | `0.00% <ø> (ø)` | |
   | [...ore/sdk/src/stream\_builder/iggy\_stream\_consumer.rs](https://app.codecov.io/gh/apache/iggy/pull/4275?src=pr&el=tree&filepath=core%2Fsdk%2Fsrc%2Fstream_builder%2Figgy_stream_consumer.rs&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-Y29yZS9zZGsvc3JjL3N0cmVhbV9idWlsZGVyL2lnZ3lfc3RyZWFtX2NvbnN1bWVyLnJz) | `35.48% <ø> (ø)` | |
   | [...ore/sdk/src/stream\_builder/iggy\_stream\_producer.rs](https://app.codecov.io/gh/apache/iggy/pull/4275?src=pr&el=tree&filepath=core%2Fsdk%2Fsrc%2Fstream_builder%2Figgy_stream_producer.rs&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-Y29yZS9zZGsvc3JjL3N0cmVhbV9idWlsZGVyL2lnZ3lfc3RyZWFtX3Byb2R1Y2VyLnJz) | `0.00% <ø> (ø)` | |
   
   ... and [53 files with indirect coverage changes](https://app.codecov.io/gh/apache/iggy/pull/4275/indirect-changes?src=pr&el=tree-more&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)
   </details>
   <details><summary> :rocket: New features to boost your workflow: </summary>
   
   - :snowflake: [Test Analytics](https://docs.codecov.com/docs/test-analytics): Detect flaky tests, report on failures, and find test suite problems.
   - :package: [JS Bundle Analysis](https://docs.codecov.com/docs/javascript-bundle-analysis): Save yourself from yourself by tracking and limiting bundle sizes in JS merges.
   </details>


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@iggy.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org