wireman_core/client/
reflection.rs

1use prost_types::FileDescriptorSet;
2use tonic::Code;
3
4use crate::{descriptor::ReflectionRequest, error::Error};
5
6mod v1;
7mod v1alpha;
8
9/// Returns the file descriptor set from a reflection request.
10pub(crate) async fn build_file_descriptor_set(
11    request: ReflectionRequest,
12) -> Result<FileDescriptorSet, Error> {
13    let v1_result = v1::build_file_descriptor_set(request.clone()).await;
14    if let Err(Error::GrpcError(status)) = &v1_result {
15        if status.code == Code::Unimplemented {
16            match v1alpha::build_file_descriptor_set(request).await {
17                Ok(alpha_result) => return Ok(alpha_result),
18                Err(_) => return v1_result,
19            }
20        }
21    }
22    v1_result
23}