diff --git a/examples/rust/src/bin/client.rs b/examples/rust/src/bin/client.rs index 4c26370..466ebfa 100644 --- a/examples/rust/src/bin/client.rs +++ b/examples/rust/src/bin/client.rs @@ -9,10 +9,17 @@ use { yellowstone_grpc_proto::prelude::{ subscribe_request_filter_accounts_filter::Filter as AccountsFilterDataOneof, subscribe_request_filter_accounts_filter_memcmp::Data as AccountsFilterMemcmpOneof, - subscribe_update::UpdateOneof, SubscribeRequest, SubscribeRequestFilterAccounts, - SubscribeRequestFilterAccountsFilter, SubscribeRequestFilterAccountsFilterMemcmp, - SubscribeRequestFilterBlocks, SubscribeRequestFilterBlocksMeta, - SubscribeRequestFilterSlots, SubscribeRequestFilterTransactions, SubscribeUpdateAccount, + subscribe_update::UpdateOneof, + SubscribeRequest, + SubscribeRequestFilterAccounts, + SubscribeRequestFilterAccountsFilter, + SubscribeRequestFilterAccountsFilterMemcmp, + SubscribeRequestFilterBlocks, + SubscribeRequestFilterBlocksMeta, + SubscribeRequestFilterSlots, + SubscribeRequestFilterTransactions, + SubscribeUpdateAccount, + // PingRequest, }, }; @@ -288,3 +295,17 @@ async fn main() -> anyhow::Result<()> { .await .map_err(Into::into) } + +// unary method +// #[tokio::main] +// async fn main() -> anyhow::Result<()> { +// std::env::set_var("RUST_LOG", "info"); +// env_logger::init(); +// +// let args = Args::parse(); +// let (endpoint, x_token) = (args.endpoint.clone(), args.x_token.clone()); +// let mut client = GeyserGrpcClient::connect(endpoint, x_token, None)?; +// let response = client.ping(200).await; +// dbg!(&response); +// Ok(()) +// } diff --git a/yellowstone-grpc-client/src/lib.rs b/yellowstone-grpc-client/src/lib.rs index 0a9cd5a..ef85bfc 100644 --- a/yellowstone-grpc-client/src/lib.rs +++ b/yellowstone-grpc-client/src/lib.rs @@ -1,3 +1,5 @@ +use yellowstone_grpc_proto::geyser::{GetSlotResponse, PongResponse}; +use yellowstone_grpc_proto::prelude::{GetBlockHeightResponse, GetLatestBlockhashResponse}; use { bytes::Bytes, futures::{ @@ -15,7 +17,8 @@ use { Request, Response, Status, }, yellowstone_grpc_proto::prelude::{ - geyser_client::GeyserClient, SubscribeRequest, SubscribeRequestFilterAccounts, + geyser_client::GeyserClient, GetBlockHeightRequest, GetLatestBlockhashRequest, + GetSlotRequest, PingRequest, SubscribeRequest, SubscribeRequestFilterAccounts, SubscribeRequestFilterBlocks, SubscribeRequestFilterBlocksMeta, SubscribeRequestFilterSlots, SubscribeRequestFilterTransactions, SubscribeUpdate, }, @@ -117,6 +120,33 @@ impl GeyserGrpcClient { .await?; Ok(response) } + + pub async fn ping(&mut self, count: i32) -> GeyserGrpcClientResult { + let message = PingRequest { count }; + let request = tonic::Request::new(message); + let response = self.client.ping(request).await?; + Ok(response.into_inner()) + } + + pub async fn get_latest_blockhash( + &mut self, + ) -> GeyserGrpcClientResult { + let request = tonic::Request::new(GetLatestBlockhashRequest {}); + let response = self.client.get_latest_blockhash(request).await?; + Ok(response.into_inner()) + } + + pub async fn get_block_height(&mut self) -> GeyserGrpcClientResult { + let request = tonic::Request::new(GetBlockHeightRequest {}); + let response = self.client.get_block_height(request).await?; + Ok(response.into_inner()) + } + + pub async fn get_slot(&mut self) -> GeyserGrpcClientResult { + let request = tonic::Request::new(GetSlotRequest {}); + let response = self.client.get_slot(request).await?; + Ok(response.into_inner()) + } } #[cfg(test)]