use std::sync::Arc;
use super::common::{decoders, encoders};
use super::*;
use crate::client::blocking::Subscription;
use crate::client::sync::Client;
use crate::common::request_helpers::{self, expect_proto};
use crate::contracts::TagValue;
use crate::messages::OutgoingMessages;
use crate::{server_versions, Error};
impl Client {
pub fn scanner_parameters(&self) -> Result<String, Error> {
request_helpers::blocking::one_shot_shared(
self,
OutgoingMessages::RequestScannerParameters,
encoders::encode_scanner_parameters,
expect_proto(decoders::decode_scanner_parameters_proto),
)
}
pub fn scanner_subscription(&self, subscription: &ScannerSubscription, filter: &[TagValue]) -> Result<Subscription<Vec<ScannerData>>, Error> {
if !filter.is_empty() {
self.check_server_version(
server_versions::SCANNER_GENERIC_OPTS,
"It does not support API scanner subscription generic filter options.",
)?
}
let request_id = self.mint_request_id();
let request = encoders::encode_scanner_subscription(request_id.raw(), subscription, filter)?;
let subscription = self.send_request(request_id, request)?;
Ok(Subscription::new(Arc::clone(&self.message_bus), subscription, self.decoder_context()))
}
}
#[cfg(test)]
#[path = "sync_tests.rs"]
mod tests;