1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
pub use tonic::Status;

tonic::include_proto!("starter");

cfg_if::cfg_if! {
    if #[cfg(feature = "client")] {

        use feed_client::FeedClient;
        use tonic::transport::Channel;
        use http::uri::InvalidUri;

        #[derive(Clone)]
        pub struct Client {
            channel: Channel,
        }

        impl Client {
            pub fn new<N: Into<String>>(url: N) -> Result<Self, InvalidUri> {
                let channel = Channel::from_shared(url.into())?.connect_lazy();

                Ok(Self { channel })
            }

            pub async fn create_feed(
                &self,
                message: CreateFeedRequest,
                ) -> Result<tonic::Response<CreateFeedResponse>, Status> {
                let mut client = FeedClient::new(self.channel.clone());

                let request = tonic::Request::new(message);

                client.create(request).await
            }
        }
    }
}