1use ibc::core::host::ConsensusStateRef;
6use ibc::core::primitives::prelude::*;
7use ibc_proto::google::protobuf::Any;
8use ibc_proto::ibc::core::channel::v1::query_server::Query as ChannelQuery;
9use ibc_proto::ibc::core::channel::v1::{
10 QueryChannelClientStateRequest, QueryChannelClientStateResponse,
11 QueryChannelConsensusStateRequest, QueryChannelConsensusStateResponse,
12 QueryChannelParamsRequest, QueryChannelParamsResponse, QueryChannelRequest,
13 QueryChannelResponse, QueryChannelsRequest, QueryChannelsResponse,
14 QueryConnectionChannelsRequest, QueryConnectionChannelsResponse,
15 QueryNextSequenceReceiveRequest, QueryNextSequenceReceiveResponse,
16 QueryNextSequenceSendRequest, QueryNextSequenceSendResponse, QueryPacketAcknowledgementRequest,
17 QueryPacketAcknowledgementResponse, QueryPacketAcknowledgementsRequest,
18 QueryPacketAcknowledgementsResponse, QueryPacketCommitmentRequest,
19 QueryPacketCommitmentResponse, QueryPacketCommitmentsRequest, QueryPacketCommitmentsResponse,
20 QueryPacketReceiptRequest, QueryPacketReceiptResponse, QueryUnreceivedAcksRequest,
21 QueryUnreceivedAcksResponse, QueryUnreceivedPacketsRequest, QueryUnreceivedPacketsResponse,
22 QueryUpgradeErrorRequest, QueryUpgradeErrorResponse, QueryUpgradeRequest, QueryUpgradeResponse,
23};
24use tonic::{Request, Response, Status};
25
26use super::{
27 query_channel, query_channel_client_state, query_channel_consensus_state, query_channels,
28 query_connection_channels, query_next_sequence_receive, query_next_sequence_send,
29 query_packet_acknowledgement, query_packet_acknowledgements, query_packet_commitment,
30 query_packet_commitments, query_packet_receipt, query_unreceived_acks,
31 query_unreceived_packets,
32};
33use crate::core::context::QueryContext;
34use crate::utils::{IntoDomain, IntoResponse, TryIntoDomain};
35
36pub struct ChannelQueryService<I>
41where
42 I: QueryContext + Send + Sync + 'static,
43 ConsensusStateRef<I>: Into<Any>,
44{
45 ibc_context: I,
46}
47
48impl<I> ChannelQueryService<I>
49where
50 I: QueryContext + Send + Sync + 'static,
51 ConsensusStateRef<I>: Into<Any>,
52{
53 pub fn new(ibc_context: I) -> Self {
56 Self { ibc_context }
57 }
58}
59
60#[tonic::async_trait]
61impl<I> ChannelQuery for ChannelQueryService<I>
62where
63 I: QueryContext + Send + Sync + 'static,
64 ConsensusStateRef<I>: Into<Any>,
65{
66 async fn channel(
67 &self,
68 request: Request<QueryChannelRequest>,
69 ) -> Result<Response<QueryChannelResponse>, Status> {
70 query_channel(&self.ibc_context, &request.try_into_domain()?)?.into_response()
71 }
72
73 async fn channels(
74 &self,
75 request: Request<QueryChannelsRequest>,
76 ) -> Result<Response<QueryChannelsResponse>, Status> {
77 query_channels(&self.ibc_context, &request.into_domain())?.into_response()
78 }
79
80 async fn connection_channels(
81 &self,
82 request: Request<QueryConnectionChannelsRequest>,
83 ) -> Result<Response<QueryConnectionChannelsResponse>, Status> {
84 query_connection_channels(&self.ibc_context, &request.try_into_domain()?)?.into_response()
85 }
86
87 async fn channel_client_state(
88 &self,
89 request: Request<QueryChannelClientStateRequest>,
90 ) -> Result<Response<QueryChannelClientStateResponse>, Status> {
91 query_channel_client_state(&self.ibc_context, &request.try_into_domain()?)?.into_response()
92 }
93
94 async fn channel_consensus_state(
95 &self,
96 request: Request<QueryChannelConsensusStateRequest>,
97 ) -> Result<Response<QueryChannelConsensusStateResponse>, Status> {
98 query_channel_consensus_state(&self.ibc_context, &request.try_into_domain()?)?
99 .into_response()
100 }
101
102 async fn packet_commitment(
103 &self,
104 request: Request<QueryPacketCommitmentRequest>,
105 ) -> Result<Response<QueryPacketCommitmentResponse>, Status> {
106 query_packet_commitment(&self.ibc_context, &request.try_into_domain()?)?.into_response()
107 }
108
109 async fn packet_commitments(
110 &self,
111 request: Request<QueryPacketCommitmentsRequest>,
112 ) -> Result<Response<QueryPacketCommitmentsResponse>, Status> {
113 query_packet_commitments(&self.ibc_context, &request.try_into_domain()?)?.into_response()
114 }
115
116 async fn packet_receipt(
117 &self,
118 request: Request<QueryPacketReceiptRequest>,
119 ) -> Result<Response<QueryPacketReceiptResponse>, Status> {
120 query_packet_receipt(&self.ibc_context, &request.try_into_domain()?)?.into_response()
121 }
122
123 async fn packet_acknowledgement(
124 &self,
125 request: Request<QueryPacketAcknowledgementRequest>,
126 ) -> Result<Response<QueryPacketAcknowledgementResponse>, Status> {
127 query_packet_acknowledgement(&self.ibc_context, &request.try_into_domain()?)?
128 .into_response()
129 }
130
131 async fn packet_acknowledgements(
133 &self,
134 request: Request<QueryPacketAcknowledgementsRequest>,
135 ) -> Result<Response<QueryPacketAcknowledgementsResponse>, Status> {
136 query_packet_acknowledgements(&self.ibc_context, &request.try_into_domain()?)?
137 .into_response()
138 }
139
140 async fn unreceived_packets(
142 &self,
143 request: Request<QueryUnreceivedPacketsRequest>,
144 ) -> Result<Response<QueryUnreceivedPacketsResponse>, Status> {
145 query_unreceived_packets(&self.ibc_context, &request.try_into_domain()?)?.into_response()
146 }
147
148 async fn unreceived_acks(
150 &self,
151 request: Request<QueryUnreceivedAcksRequest>,
152 ) -> Result<Response<QueryUnreceivedAcksResponse>, Status> {
153 query_unreceived_acks(&self.ibc_context, &request.try_into_domain()?)?.into_response()
154 }
155
156 async fn next_sequence_receive(
157 &self,
158 request: Request<QueryNextSequenceReceiveRequest>,
159 ) -> Result<Response<QueryNextSequenceReceiveResponse>, Status> {
160 query_next_sequence_receive(&self.ibc_context, &request.try_into_domain()?)?.into_response()
161 }
162
163 async fn next_sequence_send(
164 &self,
165 request: Request<QueryNextSequenceSendRequest>,
166 ) -> Result<Response<QueryNextSequenceSendResponse>, Status> {
167 query_next_sequence_send(&self.ibc_context, &request.try_into_domain()?)?.into_response()
168 }
169
170 async fn upgrade_error(
171 &self,
172 _request: Request<QueryUpgradeErrorRequest>,
173 ) -> Result<Response<QueryUpgradeErrorResponse>, Status> {
174 Err(Status::unimplemented(
175 "Querying UpgradeError is not supported yet",
176 ))
177 }
178
179 async fn upgrade(
180 &self,
181 _request: Request<QueryUpgradeRequest>,
182 ) -> Result<Response<QueryUpgradeResponse>, Status> {
183 Err(Status::unimplemented(
184 "Querying Upgrade is not supported yet",
185 ))
186 }
187
188 async fn channel_params(
189 &self,
190 _request: Request<QueryChannelParamsRequest>,
191 ) -> Result<Response<QueryChannelParamsResponse>, Status> {
192 Err(Status::unimplemented(
193 "Querying ChannelParams is not supported yet",
194 ))
195 }
196}