WIP

Antonio Scandurra created

Change summary

crates/live_kit_server/src/api.rs | 43 ++++++++++++++++++++++++++------
1 file changed, 34 insertions(+), 9 deletions(-)

Detailed changes

crates/live_kit_server/src/api.rs 🔗

@@ -1,5 +1,7 @@
-use crate::token;
-use hyper::{client::HttpConnector, Request, Uri};
+use crate::{proto, token};
+use anyhow::{anyhow, Result};
+use hyper::{client::HttpConnector, header::AUTHORIZATION, Method, Request, Uri};
+use std::future::Future;
 
 pub struct Client {
     http: hyper::Client<HttpConnector>,
@@ -14,23 +16,46 @@ impl Client {
         assert!(uri.authority().is_some(), "base uri must have an authority");
         Self {
             http: hyper::Client::new(),
-            uri: uri,
+            uri,
             key,
             secret,
         }
     }
 
-    pub fn create_room(&self) {
-        // let mut uri = url.clone();
-        // uri.set_path_and_query()
+    pub fn create_room(&self, name: String) -> impl Future<Output = Result<proto::Room>> {
+        let token = token::create(
+            &self.key,
+            &self.secret,
+            None,
+            token::VideoGrant {
+                room_create: Some(true),
+                ..Default::default()
+            },
+        );
 
+        let client = self.http.clone();
         let uri = Uri::builder()
             .scheme(self.uri.scheme().unwrap().clone())
             .authority(self.uri.authority().unwrap().clone())
             .path_and_query("twirp/livekit.RoomService/CreateRoom")
             .build();
-
-        // token::create(api_key, secret_key, room_name, participant_name)
-        // self.http.request(req)
+        async move {
+            let token = token?;
+            let uri = uri?;
+            let body = proto::CreateRoomRequest {
+                name: todo!(),
+                empty_timeout: todo!(),
+                max_participants: todo!(),
+                node_id: todo!(),
+                metadata: todo!(),
+                egress: todo!(),
+            };
+            let mut request = Request::builder()
+                .uri(uri)
+                .method(Method::POST)
+                .header(AUTHORIZATION, format!("Bearer {}", token))
+                .body(body);
+            Err(anyhow!("yeah"))
+        }
     }
 }