hello/
hello.rs

1use hyper::{Body, HeaderMap, Response, header::HeaderValue};
2use warp::{Filter, Reply, fs::{File, dir}};
3use warp_range::{filter_range, get_range_with_cb};
4
5fn callback(bytes: u64) {
6    println!("Bytes: {}", bytes);
7}
8
9fn add_headers(reply: File)->Response<Body> {
10    let mut res = reply.into_response();
11    let headers = res.headers_mut();
12    let header_map = create_headers();
13    headers.extend(header_map);
14    res
15}
16
17fn create_headers() -> HeaderMap {
18    let mut header_map = HeaderMap::new();
19    header_map.insert("Server", HeaderValue::from_str("warp-range").unwrap());
20    header_map
21}
22
23#[tokio::main]
24async fn main() {
25    let test_video = "/home/uwe/Videos/Ali.mkv";
26    
27    let port = 9860;
28    println!("Running test server on http://localhost:{}", port);
29
30    let route_get_video = 
31        warp::path("getvideo")
32        .and(warp::path::end())
33        .and(filter_range())
34        .and_then(move |range_header| get_range_with_cb(range_header, test_video, "video/mp4", |bytes| {
35            callback(bytes); 
36        }));
37
38    let route_static = dir(".")
39        .map(add_headers);
40    
41    let routes = 
42        route_get_video
43        .or(route_static);
44
45    warp::serve(routes)
46        .run(([127, 0, 0, 1], port))
47        .await;        
48}