MCPcopy Create free account
hub / github.com/NVIDIA/OpenShell / spawn_set_global_setting

Function spawn_set_global_setting

crates/openshell-tui/src/lib.rs:2034–2097  ·  view source on GitHub ↗
(app: &App, tx: mpsc::UnboundedSender<Event>)

Source from the content-addressed store, hash-verified

2032}
2033
2034fn spawn_set_global_setting(app: &App, tx: mpsc::UnboundedSender<Event>) {
2035 let Some(ref edit) = app.setting_edit else {
2036 return;
2037 };
2038 let Some(entry) = app.global_settings.get(edit.index) else {
2039 return;
2040 };
2041
2042 let key = entry.key.clone();
2043 let raw = edit.input.trim().to_string();
2044 let kind = entry.kind;
2045 let mut client = app.client.clone();
2046
2047 tokio::spawn(async move {
2048 // Build the typed SettingValue from the validated input.
2049 use openshell_core::proto::{SettingValue, UpdateConfigRequest, setting_value};
2050
2051 let value = match kind {
2052 openshell_core::settings::SettingValueKind::Bool => {
2053 if let Some(v) = openshell_core::settings::parse_bool_like(&raw) {
2054 setting_value::Value::BoolValue(v)
2055 } else {
2056 let _ = tx.send(Event::GlobalSettingSetResult(Err(format!(
2057 "invalid bool value: {raw}"
2058 ))));
2059 return;
2060 }
2061 }
2062 openshell_core::settings::SettingValueKind::Int => {
2063 if let Ok(v) = raw.parse::<i64>() {
2064 setting_value::Value::IntValue(v)
2065 } else {
2066 let _ = tx.send(Event::GlobalSettingSetResult(Err(format!(
2067 "invalid int value: {raw}"
2068 ))));
2069 return;
2070 }
2071 }
2072 openshell_core::settings::SettingValueKind::String => {
2073 setting_value::Value::StringValue(raw)
2074 }
2075 };
2076
2077 let req = UpdateConfigRequest {
2078 name: String::new(),
2079 policy: None,
2080 setting_key: key,
2081 setting_value: Some(SettingValue { value: Some(value) }),
2082 delete_setting: false,
2083 global: true,
2084 merge_operations: vec![],
2085 expected_resource_version: 0,
2086 };
2087
2088 let result = tokio::time::timeout(Duration::from_secs(5), client.update_config(req)).await;
2089
2090 let event = match result {
2091 Ok(Ok(resp)) => Event::GlobalSettingSetResult(Ok(resp.into_inner().settings_revision)),

Callers 1

runFunction · 0.85

Calls 5

parse_bool_likeFunction · 0.85
messageMethod · 0.80
spawnFunction · 0.50
getMethod · 0.45
update_configMethod · 0.45

Tested by

no test coverage detected