diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..fa0287c --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,25 @@ +name: ci + +on: + push: + branches: [main] + pull_request: + branches: [main] + +env: + CARGO_TERM_COLOR: always + +jobs: + rust: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable + with: + components: rustfmt, clippy + - name: fmt + run: cargo fmt --all -- --check + - name: clippy + run: cargo clippy --all-targets --all-features + - name: test + run: cargo test --all-features diff --git a/src/streaming/grpc/subscription.rs b/src/streaming/grpc/subscription.rs index eb10515..8a9608c 100644 --- a/src/streaming/grpc/subscription.rs +++ b/src/streaming/grpc/subscription.rs @@ -52,14 +52,13 @@ impl SubscriptionManager { impl Stream>, SubscribeRequest, )> { - let blocks_meta = - if event_type_filter.is_some() && event_type_filter.unwrap().include_block_event() { - HashMap::from([("".to_owned(), SubscribeRequestFilterBlocksMeta {})]) - } else if event_type_filter.is_none() { - HashMap::from([("".to_owned(), SubscribeRequestFilterBlocksMeta {})]) - } else { - HashMap::new() - }; + // When no filter is set, subscribe to block meta like before; if a filter exists, + // only keep block meta when the filter includes block-related event types. + let blocks_meta = if event_type_filter.map_or(true, |f| f.include_block_event()) { + HashMap::from([("".to_owned(), SubscribeRequestFilterBlocksMeta {})]) + } else { + HashMap::new() + }; let subscribe_request = SubscribeRequest { accounts: accounts.unwrap_or_default(), transactions: transactions.unwrap_or_default(), @@ -82,7 +81,7 @@ impl SubscriptionManager { account_filter: Vec, event_type_filter: Option<&EventTypeFilter>, ) -> Option { - if event_type_filter.is_some() && !event_type_filter.unwrap().include_account_event() { + if event_type_filter.is_some_and(|f| !f.include_account_event()) { return None; } if account_filter.is_empty() { @@ -109,7 +108,7 @@ impl SubscriptionManager { transaction_filter: Vec, event_type_filter: Option<&EventTypeFilter>, ) -> Option { - if event_type_filter.is_some() && !event_type_filter.unwrap().include_transaction_event() { + if event_type_filter.is_some_and(|f| !f.include_transaction_event()) { return None; } let mut transactions = HashMap::new();