Skip to content

Commit acafa26

Browse files
committed
less unwrap in RPC server code
1 parent 9dc8b17 commit acafa26

12 files changed

Lines changed: 75 additions & 21 deletions

File tree

vey-gateway/src/control/bridge/reload.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
* SPDX-FileCopyrightText: 2026 VEY-OSS Developers.
55
*/
66

7+
use std::str::FromStr;
8+
79
use anyhow::anyhow;
810

911
use vey_types::metrics::NodeName;
@@ -23,7 +25,8 @@ macro_rules! impl_reload {
2325
name: String,
2426
position: Option<YamlDocPosition>,
2527
) -> anyhow::Result<()> {
26-
let name = unsafe { NodeName::new_unchecked(name) };
28+
let name =
29+
NodeName::from_str(&name).map_err(|e| anyhow!("invalid node name {name}: {e}"))?;
2730
vey_daemon::runtime::main_handle()
2831
.ok_or(anyhow!("unable to get main runtime handle"))?
2932
.spawn(async move { crate::$m::reload(&name, position).await })

vey-gateway/src/control/capnp/backend.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
*/
55

66
use std::rc::Rc;
7+
use std::str::FromStr;
8+
9+
use anyhow::anyhow;
710

811
use vey_types::metrics::NodeName;
912

@@ -17,7 +20,8 @@ pub(super) struct BackendControlImpl {
1720

1821
impl BackendControlImpl {
1922
pub(super) fn new_client(name: &str) -> anyhow::Result<backend_control::Client> {
20-
let name = unsafe { NodeName::new_unchecked(name) };
23+
let name =
24+
NodeName::from_str(name).map_err(|e| anyhow!("invalid backend name {name}: {e}"))?;
2125
let backend = crate::backend::get_backend(&name)?;
2226
Ok(capnp_rpc::new_client(BackendControlImpl { backend }))
2327
}

vey-gateway/src/control/capnp/proc.rs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
*/
66

77
use std::rc::Rc;
8+
use std::str::FromStr;
89

910
use vey_types::metrics::NodeName;
1011

@@ -119,9 +120,17 @@ impl proc_control::Server for ProcControlImpl {
119120
mut results: proc_control::ForceQuitOfflineServerResults,
120121
) -> capnp::Result<()> {
121122
let server = params.get()?.get_name()?.to_str()?;
122-
let server = unsafe { NodeName::new_unchecked(server) };
123-
crate::serve::force_quit_offline_server(&server);
124-
results.get().init_result().set_ok("success");
123+
match NodeName::from_str(server) {
124+
Ok(server) => {
125+
crate::serve::force_quit_offline_server(&server);
126+
results.get().init_result().set_ok("success");
127+
}
128+
Err(e) => {
129+
let mut ev = results.get().init_result().init_err();
130+
ev.set_code(-1);
131+
ev.set_reason(format!("invalid server {server}: {e}"));
132+
}
133+
}
125134
Ok(())
126135
}
127136

vey-gateway/src/control/capnp/server.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
*/
66

77
use std::rc::Rc;
8+
use std::str::FromStr;
9+
10+
use anyhow::anyhow;
811

912
use vey_types::metrics::NodeName;
1013

@@ -18,7 +21,8 @@ pub(super) struct ServerControlImpl {
1821

1922
impl ServerControlImpl {
2023
pub(super) fn new_client(name: &str) -> anyhow::Result<server_control::Client> {
21-
let name = unsafe { NodeName::new_unchecked(name) };
24+
let name =
25+
NodeName::from_str(name).map_err(|e| anyhow!("invalid server name {name}: {e}"))?;
2226
let server = crate::serve::get_server(&name)?;
2327
Ok(capnp_rpc::new_client(ServerControlImpl { server }))
2428
}

vey-keyless/src/control/capnp/server.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ pub(super) struct ServerControlImpl {
2222

2323
impl ServerControlImpl {
2424
pub(super) fn new_client(name: &str) -> anyhow::Result<server_control::Client> {
25-
let name = unsafe { NodeName::new_unchecked(name) };
25+
let name =
26+
NodeName::from_str(name).map_err(|e| anyhow!("invalid server name {name}: {e}"))?;
2627
let server = crate::serve::get_server(&name)?;
2728
Ok(capnp_rpc::new_client(ServerControlImpl { server }))
2829
}

vey-proxy/src/control/bridge/reload.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
* SPDX-FileCopyrightText: 2026 VEY-OSS Developers.
55
*/
66

7+
use std::str::FromStr;
8+
79
use anyhow::anyhow;
810

911
use vey_types::metrics::NodeName;
@@ -23,7 +25,8 @@ macro_rules! impl_reload {
2325
name: String,
2426
position: Option<YamlDocPosition>,
2527
) -> anyhow::Result<()> {
26-
let name = unsafe { NodeName::new_unchecked(name) };
28+
let name = NodeName::from_str(name.as_str())
29+
.map_err(|e| anyhow!("invalid node name {name}: {e}"))?;
2730
vey_daemon::runtime::main_handle()
2831
.ok_or(anyhow!("unable to get main runtime handle"))?
2932
.spawn(async move { crate::$m::reload(&name, position).await })

vey-proxy/src/control/capnp/escaper.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
*/
55

66
use std::rc::Rc;
7+
use std::str::FromStr;
8+
9+
use anyhow::anyhow;
710

811
use vey_types::metrics::NodeName;
912

@@ -18,7 +21,8 @@ pub(super) struct EscaperControlImpl {
1821

1922
impl EscaperControlImpl {
2023
pub(super) fn new_client(name: &str) -> anyhow::Result<escaper_control::Client> {
21-
let name = unsafe { NodeName::new_unchecked(name) };
24+
let name =
25+
NodeName::from_str(name).map_err(|e| anyhow!("invalid escaper name {name}: {e}"))?;
2226
let escaper = crate::escape::get_escaper(&name)?;
2327
Ok(capnp_rpc::new_client(EscaperControlImpl { escaper }))
2428
}

vey-proxy/src/control/capnp/proc.rs

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
*/
66

77
use std::rc::Rc;
8+
use std::str::FromStr;
89

910
use vey_types::metrics::NodeName;
1011

@@ -195,8 +196,10 @@ impl proc_control::Server for ProcControlImpl {
195196
mut results: proc_control::GetUserGroupResults,
196197
) -> capnp::Result<()> {
197198
let user_group = params.get()?.get_name()?.to_str()?;
198-
let ug = super::user_group::UserGroupControlImpl::new_client(user_group);
199-
set_fetch_result::<user_group_control::Owned>(results.get().init_user_group(), Ok(ug))
199+
set_fetch_result::<user_group_control::Owned>(
200+
results.get().init_user_group(),
201+
super::user_group::UserGroupControlImpl::new_client(user_group),
202+
)
200203
}
201204

202205
async fn get_resolver(
@@ -251,9 +254,17 @@ impl proc_control::Server for ProcControlImpl {
251254
mut results: proc_control::ForceQuitOfflineServerResults,
252255
) -> capnp::Result<()> {
253256
let server = params.get()?.get_name()?.to_str()?;
254-
let server = unsafe { NodeName::new_unchecked(server) };
255-
crate::serve::force_quit_offline_server(&server);
256-
results.get().init_result().set_ok("success");
257+
match NodeName::from_str(server) {
258+
Ok(server) => {
259+
crate::serve::force_quit_offline_server(&server);
260+
results.get().init_result().set_ok("success");
261+
}
262+
Err(e) => {
263+
let mut ev = results.get().init_result().init_err();
264+
ev.set_code(-1);
265+
ev.set_reason(format!("invalid server {server}: {e}"));
266+
}
267+
}
257268
Ok(())
258269
}
259270
}

vey-proxy/src/control/capnp/resolver.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,14 @@ use std::rc::Rc;
88
use std::str::FromStr;
99
use std::time::Duration;
1010

11-
use vey_proxy_proto::resolver_capnp::{QueryStrategy, resolver_control};
11+
use anyhow::anyhow;
12+
1213
use vey_types::metrics::NodeName;
1314
use vey_types::net::DomainName;
1415
use vey_types::resolve::{QueryStrategy as ResolveQueryStrategy, ResolveStrategy};
1516

17+
use vey_proxy_proto::resolver_capnp::{QueryStrategy, resolver_control};
18+
1619
use crate::resolve::{ArcIntegratedResolverHandle, HappyEyeballsResolveJob};
1720

1821
pub(super) struct ResolverControlImpl {
@@ -21,7 +24,8 @@ pub(super) struct ResolverControlImpl {
2124

2225
impl ResolverControlImpl {
2326
pub(super) fn new_client(name: &str) -> anyhow::Result<resolver_control::Client> {
24-
let name = unsafe { NodeName::new_unchecked(name) };
27+
let name =
28+
NodeName::from_str(name).map_err(|e| anyhow!("invalid resolver name {name}: {e}"))?;
2529
let handler = crate::resolve::get_handle(&name)?;
2630
Ok(capnp_rpc::new_client(ResolverControlImpl {
2731
resolver_handler: handler,

vey-proxy/src/control/capnp/server.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
*/
66

77
use std::rc::Rc;
8+
use std::str::FromStr;
9+
10+
use anyhow::anyhow;
811

912
use vey_types::metrics::NodeName;
1013

@@ -18,7 +21,8 @@ pub(super) struct ServerControlImpl {
1821

1922
impl ServerControlImpl {
2023
pub(super) fn new_client(name: &str) -> anyhow::Result<server_control::Client> {
21-
let name = unsafe { NodeName::new_unchecked(name) };
24+
let name =
25+
NodeName::from_str(name).map_err(|e| anyhow!("invalid server name {name}: {e}"))?;
2226
let server = crate::serve::get_server(&name)?;
2327
Ok(capnp_rpc::new_client(ServerControlImpl { server }))
2428
}

0 commit comments

Comments
 (0)