changelog shortlog graph tags branches changeset files file revisions raw help

Mercurial > core / annotate rust/bin/alik/lib.rs

changeset 698: 96958d3eb5b0
parent: 94d358919982
author: Richard Westhaver <ellis@rwest.io>
date: Fri, 04 Oct 2024 22:04:59 -0400
permissions: -rw-r--r--
description: fixes
267
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
1
 /// app/cli/alik/lib.rs --- Alik Lib
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
2
 
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
3
 // Helper of man
167
611060cba9f0 rust net updates and c2.el import
ellis <ellis@rwest.io>
parents:
diff changeset
4
 
189
3d78bed56188 apply clippy fixes
Richard Westhaver <ellis@rwest.io>
parents: 187
diff changeset
5
 /// Code:
267
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
6
 pub mod graphql;
268
a52d42f30617 rocksdb alien functions and cargo fmt
Richard Westhaver <ellis@rwest.io>
parents: 267
diff changeset
7
 pub mod http;
267
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
8
 pub mod ping;
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
9
 pub mod udp;
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
10
 
268
a52d42f30617 rocksdb alien functions and cargo fmt
Richard Westhaver <ellis@rwest.io>
parents: 267
diff changeset
11
 use db::{rocksdb, Db, DbConfigExt};
189
3d78bed56188 apply clippy fixes
Richard Westhaver <ellis@rwest.io>
parents: 187
diff changeset
12
 use net::{
3d78bed56188 apply clippy fixes
Richard Westhaver <ellis@rwest.io>
parents: 187
diff changeset
13
   axum::{
3d78bed56188 apply clippy fixes
Richard Westhaver <ellis@rwest.io>
parents: 187
diff changeset
14
     body::{Body, Bytes},
3d78bed56188 apply clippy fixes
Richard Westhaver <ellis@rwest.io>
parents: 187
diff changeset
15
     extract::State,
3d78bed56188 apply clippy fixes
Richard Westhaver <ellis@rwest.io>
parents: 187
diff changeset
16
     http::{HeaderMap, HeaderName, HeaderValue, StatusCode},
267
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
17
     response::{IntoResponse, Response},
189
3d78bed56188 apply clippy fixes
Richard Westhaver <ellis@rwest.io>
parents: 187
diff changeset
18
     routing::get,
3d78bed56188 apply clippy fixes
Richard Westhaver <ellis@rwest.io>
parents: 187
diff changeset
19
     Router,
3d78bed56188 apply clippy fixes
Richard Westhaver <ellis@rwest.io>
parents: 187
diff changeset
20
   },
268
a52d42f30617 rocksdb alien functions and cargo fmt
Richard Westhaver <ellis@rwest.io>
parents: 267
diff changeset
21
   http::tower::trace::TraceLayer,
a52d42f30617 rocksdb alien functions and cargo fmt
Richard Westhaver <ellis@rwest.io>
parents: 267
diff changeset
22
   reqwest::Client,
189
3d78bed56188 apply clippy fixes
Richard Westhaver <ellis@rwest.io>
parents: 187
diff changeset
23
 };
267
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
24
 
213
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
25
 use serde::{Deserialize, Serialize};
267
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
26
 
213
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
27
 use std::{
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
28
   collections::HashMap,
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
29
   fs,
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
30
   path::{Path, PathBuf},
268
a52d42f30617 rocksdb alien functions and cargo fmt
Richard Westhaver <ellis@rwest.io>
parents: 267
diff changeset
31
   sync::Arc,
213
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
32
 };
267
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
33
 
213
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
34
 pub use krypt::KryptConfig;
267
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
35
 
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
36
 use logger::{info, log, tracing::Span};
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
37
 
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
38
 use obj::{Configure, NetworkConfig, Objective};
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
39
 
213
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
40
 use std::time::Duration;
267
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
41
 
213
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
42
 #[derive(Serialize, Deserialize, Clone, Debug, Default)]
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
43
 pub struct AlikConfig {
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
44
   krypt: KryptConfig,
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
45
   db_path: Option<PathBuf>,
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
46
   db_opts: HashMap<String, String>,
267
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
47
   net: NetworkConfig,
213
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
48
 }
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
49
 impl AlikConfig {
267
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
50
   pub fn new() -> Self {
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
51
     AlikConfig::default()
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
52
   }
213
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
53
   pub fn load<P: AsRef<Path>>(path: P) -> Result<Self, obj::Error> {
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
54
     let s = fs::read_to_string(path)?;
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
55
     AlikConfig::from_json_str(&s)
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
56
   }
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
57
 }
267
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
58
 
213
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
59
 obj::impl_config!(AlikConfig);
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
60
 
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
61
 impl DbConfigExt for AlikConfig {
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
62
   fn db_path(self) -> Option<PathBuf> {
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
63
     self.db_path
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
64
   }
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
65
   fn db_user(self) -> Option<String> {
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
66
     None
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
67
   }
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
68
   fn set_db_config_value(&mut self, key: &str, val: &str) -> Option<String> {
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
69
     self.db_opts.insert(key.to_string(), val.to_string())
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
70
   }
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
71
   fn get_db_config_value(self, key: &str) -> Option<String> {
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
72
     self.db_opts.get(key).cloned()
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
73
   }
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
74
 }
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
75
 
267
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
76
 pub trait AlikService {}
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
77
 
213
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
78
 #[derive(Debug)]
267
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
79
 pub struct Alik {
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
80
   db: Option<rocksdb::DB>,
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
81
   config: Arc<AlikConfig>,
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
82
   router: Option<Router>,
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
83
 }
213
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
84
 
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
85
 impl Alik {
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
86
   pub fn new() -> Alik {
267
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
87
     Alik {
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
88
       db: None,
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
89
       config: Arc::new(AlikConfig::new()),
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
90
       router: None,
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
91
     }
213
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
92
   }
267
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
93
   pub fn with_config(cfg: &AlikConfig) -> Alik {
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
94
     Alik {
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
95
       db: None,
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
96
       config: Arc::new(cfg.to_owned()),
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
97
       router: None,
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
98
     }
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
99
   }
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
100
   pub fn network_init(&mut self) -> Result<(), net::Error> {
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
101
     let socket = &self.config.net.socket;
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
102
     let peers = self.config.net.peers.as_ref();
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
103
     info!("initializing on socket {:?}", socket);
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
104
     info!("initializing with peers {:?}", peers.unwrap());
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
105
     self.router = Some(Router::new().route("/", get("")));
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
106
     Ok(())
213
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
107
   }
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
108
 }
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
109
 
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
110
 impl Db for Alik {
267
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
111
   fn db_init(&self) -> Result<rocksdb::DB, db::Error> {
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
112
     let path = self.config.db_path.as_ref();
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
113
     let opts = &self.config.db_opts;
268
a52d42f30617 rocksdb alien functions and cargo fmt
Richard Westhaver <ellis@rwest.io>
parents: 267
diff changeset
114
     info!("{:?}", opts);
a52d42f30617 rocksdb alien functions and cargo fmt
Richard Westhaver <ellis@rwest.io>
parents: 267
diff changeset
115
     rocksdb::DB::open(&rocksdb::Options::default(), path.unwrap()).unwrap();
267
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
116
     Ok(rocksdb::DB::open_default("").unwrap())
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
117
   }
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
118
   fn db_init_mut(&mut self) -> Result<(), db::Error> {
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
119
     self.db = Some(self.db_init().unwrap());
213
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
120
     Ok(())
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
121
   }
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
122
   fn db_open(&self) -> Result<(), db::Error> {
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
123
     Ok(())
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
124
   }
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
125
   fn db_close(&self) -> Result<(), db::Error> {
267
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
126
     if let Some(db) = &self.db {
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
127
       db.cancel_all_background_work(true)
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
128
     };
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
129
     Ok(())
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
130
   }
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
131
   fn db_close_mut(&mut self) -> Result<(), db::Error> {
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
132
     self.db_close().unwrap();
f3d814fb136a db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents: 238
diff changeset
133
     self.db = None;
213
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
134
     Ok(())
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
135
   }
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
136
   fn db_query(&self) -> Result<(), db::Error> {
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
137
     Ok(())
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
138
   }
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
139
   fn db_transaction(&self) -> Result<(), db::Error> {
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
140
     Ok(())
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
141
   }
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
142
 }
167
611060cba9f0 rust net updates and c2.el import
ellis <ellis@rwest.io>
parents:
diff changeset
143
 
189
3d78bed56188 apply clippy fixes
Richard Westhaver <ellis@rwest.io>
parents: 187
diff changeset
144
 /// Server
167
611060cba9f0 rust net updates and c2.el import
ellis <ellis@rwest.io>
parents:
diff changeset
145
 pub async fn proxy_via_reqwest(State(client): State<Client>) -> Response {
189
3d78bed56188 apply clippy fixes
Richard Westhaver <ellis@rwest.io>
parents: 187
diff changeset
146
   let reqwest_response =
213
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
147
     match client.get("https://compiler.company").send().await {
189
3d78bed56188 apply clippy fixes
Richard Westhaver <ellis@rwest.io>
parents: 187
diff changeset
148
       Ok(res) => res,
3d78bed56188 apply clippy fixes
Richard Westhaver <ellis@rwest.io>
parents: 187
diff changeset
149
       Err(err) => {
3d78bed56188 apply clippy fixes
Richard Westhaver <ellis@rwest.io>
parents: 187
diff changeset
150
         log::error!("{} {}", &err, "request failed");
3d78bed56188 apply clippy fixes
Richard Westhaver <ellis@rwest.io>
parents: 187
diff changeset
151
         return (StatusCode::BAD_REQUEST, Body::empty()).into_response();
3d78bed56188 apply clippy fixes
Richard Westhaver <ellis@rwest.io>
parents: 187
diff changeset
152
       }
167
611060cba9f0 rust net updates and c2.el import
ellis <ellis@rwest.io>
parents:
diff changeset
153
     };
611060cba9f0 rust net updates and c2.el import
ellis <ellis@rwest.io>
parents:
diff changeset
154
 
189
3d78bed56188 apply clippy fixes
Richard Westhaver <ellis@rwest.io>
parents: 187
diff changeset
155
   let response_builder =
3d78bed56188 apply clippy fixes
Richard Westhaver <ellis@rwest.io>
parents: 187
diff changeset
156
     Response::builder().status(reqwest_response.status().as_u16());
167
611060cba9f0 rust net updates and c2.el import
ellis <ellis@rwest.io>
parents:
diff changeset
157
 
213
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
158
   // different http crate versions?
189
3d78bed56188 apply clippy fixes
Richard Westhaver <ellis@rwest.io>
parents: 187
diff changeset
159
   let mut headers = HeaderMap::with_capacity(reqwest_response.headers().len());
3d78bed56188 apply clippy fixes
Richard Westhaver <ellis@rwest.io>
parents: 187
diff changeset
160
   headers.extend(reqwest_response.headers().into_iter().map(
3d78bed56188 apply clippy fixes
Richard Westhaver <ellis@rwest.io>
parents: 187
diff changeset
161
     |(name, value)| {
3d78bed56188 apply clippy fixes
Richard Westhaver <ellis@rwest.io>
parents: 187
diff changeset
162
       let name = HeaderName::from_bytes(name.as_ref()).unwrap();
3d78bed56188 apply clippy fixes
Richard Westhaver <ellis@rwest.io>
parents: 187
diff changeset
163
       let value = HeaderValue::from_bytes(value.as_ref()).unwrap();
3d78bed56188 apply clippy fixes
Richard Westhaver <ellis@rwest.io>
parents: 187
diff changeset
164
       (name, value)
3d78bed56188 apply clippy fixes
Richard Westhaver <ellis@rwest.io>
parents: 187
diff changeset
165
     },
3d78bed56188 apply clippy fixes
Richard Westhaver <ellis@rwest.io>
parents: 187
diff changeset
166
   ));
167
611060cba9f0 rust net updates and c2.el import
ellis <ellis@rwest.io>
parents:
diff changeset
167
 
189
3d78bed56188 apply clippy fixes
Richard Westhaver <ellis@rwest.io>
parents: 187
diff changeset
168
   response_builder
3d78bed56188 apply clippy fixes
Richard Westhaver <ellis@rwest.io>
parents: 187
diff changeset
169
     .body(Body::from_stream(reqwest_response.bytes_stream()))
213
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
170
     // body is empty, no error
189
3d78bed56188 apply clippy fixes
Richard Westhaver <ellis@rwest.io>
parents: 187
diff changeset
171
     .unwrap()
167
611060cba9f0 rust net updates and c2.el import
ellis <ellis@rwest.io>
parents:
diff changeset
172
 }
611060cba9f0 rust net updates and c2.el import
ellis <ellis@rwest.io>
parents:
diff changeset
173
 
213
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
174
 pub async fn start_http_proxy(addr: &str) {
167
611060cba9f0 rust net updates and c2.el import
ellis <ellis@rwest.io>
parents:
diff changeset
175
   let client = Client::new();
189
3d78bed56188 apply clippy fixes
Richard Westhaver <ellis@rwest.io>
parents: 187
diff changeset
176
   let app = Router::new()
3d78bed56188 apply clippy fixes
Richard Westhaver <ellis@rwest.io>
parents: 187
diff changeset
177
     .route("/", get(proxy_via_reqwest))
3d78bed56188 apply clippy fixes
Richard Westhaver <ellis@rwest.io>
parents: 187
diff changeset
178
     .layer(TraceLayer::new_for_http().on_body_chunk(
3d78bed56188 apply clippy fixes
Richard Westhaver <ellis@rwest.io>
parents: 187
diff changeset
179
       |chunk: &Bytes, _latency: Duration, _span: &Span| {
224
fdea20982c25 deferror
Richard Westhaver <ellis@rwest.io>
parents: 213
diff changeset
180
         log::debug!("streaming {} bytes", chunk.len());
189
3d78bed56188 apply clippy fixes
Richard Westhaver <ellis@rwest.io>
parents: 187
diff changeset
181
       },
3d78bed56188 apply clippy fixes
Richard Westhaver <ellis@rwest.io>
parents: 187
diff changeset
182
     ))
3d78bed56188 apply clippy fixes
Richard Westhaver <ellis@rwest.io>
parents: 187
diff changeset
183
     .with_state(client);
213
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
184
   let listener = tokio::net::TcpListener::bind(addr).await.unwrap();
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
185
   println!(
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
186
     "http_proxy running on: http://{}",
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
187
     listener.local_addr().unwrap()
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
188
   );
189
3d78bed56188 apply clippy fixes
Richard Westhaver <ellis@rwest.io>
parents: 187
diff changeset
189
   net::axum::serve(listener, app).await.unwrap();
167
611060cba9f0 rust net updates and c2.el import
ellis <ellis@rwest.io>
parents:
diff changeset
190
 }
611060cba9f0 rust net updates and c2.el import
ellis <ellis@rwest.io>
parents:
diff changeset
191
 
213
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
192
 // pub async fn stream_some_data() -> Body {
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
193
 //   let stream = net::stream::iter(0..5)
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
194
 //     .throttle(Duration::from_secs(1))
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
195
 //     .map(|n| n.to_string())
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
196
 //     .map(Ok::<_, Infallible>);
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
197
 //   Body::from_stream(stream)
4f49127c9048 alik updates
Richard Westhaver <ellis@rwest.io>
parents: 189
diff changeset
198
 // }