From ed54d902ff8b259132993c9ff708ca0a6ed39db7 Mon Sep 17 00:00:00 2001 From: Brindha Senthil Date: Tue, 3 Sep 2024 10:45:06 -0700 Subject: [PATCH 1/8] feat: Remove bundled Ripple RPC and load from a path in firebolt-devices --- core/main/src/bootstrap/manifest/apps.rs | 15 +++++--- core/main/src/state/openrpc_state.rs | 37 +++++++++++++++----- core/sdk/src/api/manifest/device_manifest.rs | 8 ++++- 3 files changed, 47 insertions(+), 13 deletions(-) diff --git a/core/main/src/bootstrap/manifest/apps.rs b/core/main/src/bootstrap/manifest/apps.rs index e5035bd9f..5bdb65948 100644 --- a/core/main/src/bootstrap/manifest/apps.rs +++ b/core/main/src/bootstrap/manifest/apps.rs @@ -64,10 +64,17 @@ fn load_from_env() -> Result<(String, Vec), RippleError> { } fn load_from_home() -> Result<(String, Vec), RippleError> { - match std::env::var("HOME") { - Ok(home) => load(format!("{}/.ripple/firebolt-app-library.json", home)), - Err(_) => Err(RippleError::MissingInput), - } + std::env::var("HOME").map_or_else( + |_| Err(RippleError::MissingInput), + |home| { + let sub_path = if cfg!(feature = "local_dev") { + "firebolt-app-library.json" + } else { + ".ripple/firebolt-app-library.json" + }; + load(format!("{}/{}", home, sub_path)) + }, + ) } fn load_from_etc() -> Result<(String, Vec), RippleError> { diff --git a/core/main/src/state/openrpc_state.rs b/core/main/src/state/openrpc_state.rs index 8c19d2c90..86dcd291e 100644 --- a/core/main/src/state/openrpc_state.rs +++ b/core/main/src/state/openrpc_state.rs @@ -15,6 +15,7 @@ // SPDX-License-Identifier: Apache-2.0 // +use jsonrpsee::tracing::info; use ripple_sdk::log::{debug, error}; use ripple_sdk::{api::firebolt::fb_openrpc::CapabilityPolicy, serde_json}; use ripple_sdk::{ @@ -33,6 +34,7 @@ use ripple_sdk::{ }; use std::{ collections::HashMap, + fs, sync::{Arc, RwLock}, }; @@ -78,7 +80,7 @@ pub struct OpenRpcState { } impl OpenRpcState { - fn load_additional_rpc(rpc: &mut FireboltOpenRpc, file_contents: &'static str) { + fn load_additional_rpc(rpc: &mut FireboltOpenRpc, file_contents: &str) { match serde_json::from_str::(file_contents) { Ok(addl_rpc) => { for m in addl_rpc.methods { @@ -101,8 +103,8 @@ impl OpenRpcState { Ok(fvm) => { return Some(fvm.into()); } - _ => { - error!("load_open_rpc: can't parse {path}"); + e => { + error!("load_open_rpc: can't parse {path} e={:?}", e); } } } @@ -166,11 +168,8 @@ impl OpenRpcState { provider_registrations: Vec, ) -> OpenRpcState { let version_manifest = Self::load_firebolt_open_rpc(); - let firebolt_open_rpc: FireboltOpenRpc = version_manifest.clone().into(); - let ripple_rpc_file = std::include_str!("./ripple-rpc.json"); - let mut ripple_open_rpc: FireboltOpenRpc = FireboltOpenRpc::default(); - Self::load_additional_rpc(&mut ripple_open_rpc, ripple_rpc_file); + let ripple_open_rpc: FireboltOpenRpc = FireboltOpenRpc::default(); let openrpc_validator: FireboltOpenRpcValidator = serde_json::from_str(std::include_str!("./firebolt-open-rpc.json")).unwrap(); @@ -189,7 +188,7 @@ impl OpenRpcState { v.build_provider_relation_sets(&firebolt_open_rpc.methods); for path in extn_sdks { - if v.add_extension_open_rpc(&path).is_err() { + if v.load_ext_sdk_rpc(&path).is_err() { error!("Error adding extn_sdk from {path}"); } } @@ -197,6 +196,28 @@ impl OpenRpcState { v } + pub fn load_ext_sdk_rpc(&self, path: &str) -> Result<(), RippleError> { + info!("Loading extension OpenRPC from {path}"); + + let content = if path.contains("ripple-rpc.json") { + fs::read_to_string(path).map_err(|e| { + error!("Failed to read the file at {}: {:?}", path, e); + RippleError::ParseError + })? + } else { + return self.add_extension_open_rpc(path).map_err(|_| { + error!("Error adding extn_sdk from {path}"); + RippleError::ParseError + }); + }; + + let mut ripple_open_rpc = FireboltOpenRpc::default(); + Self::load_additional_rpc(&mut ripple_open_rpc, &content); + self.add_open_rpc(ripple_open_rpc); + info!("Successfully loaded extn_sdk from {path}"); + Ok(()) + } + pub fn add_open_rpc(&self, open_rpc: FireboltOpenRpc) { let cap_map = open_rpc.get_methods_caps(); self.extend_caps(cap_map); diff --git a/core/sdk/src/api/manifest/device_manifest.rs b/core/sdk/src/api/manifest/device_manifest.rs index 3a079d00a..d922cf744 100644 --- a/core/sdk/src/api/manifest/device_manifest.rs +++ b/core/sdk/src/api/manifest/device_manifest.rs @@ -147,8 +147,14 @@ pub struct DistributionConfiguration { impl Default for DistributionConfiguration { fn default() -> Self { + let library_path = if cfg!(feature = "local_dev") { + std::env::var("HOME").unwrap_or_default() + "/firebolt-app-library.json" + } else { + "/etc/firebolt-app-library.json".into() + }; + DistributionConfiguration { - library: "/etc/firebolt-app-library.json".into(), + library: library_path.into(), } } } From c3d8c024b427a30aba47453b4075e80d947fdeda Mon Sep 17 00:00:00 2001 From: Brindha Senthil Date: Tue, 3 Sep 2024 10:47:17 -0700 Subject: [PATCH 2/8] feat: formatted code --- core/main/src/state/openrpc_state.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/main/src/state/openrpc_state.rs b/core/main/src/state/openrpc_state.rs index 86dcd291e..a27adf9d1 100644 --- a/core/main/src/state/openrpc_state.rs +++ b/core/main/src/state/openrpc_state.rs @@ -198,7 +198,7 @@ impl OpenRpcState { pub fn load_ext_sdk_rpc(&self, path: &str) -> Result<(), RippleError> { info!("Loading extension OpenRPC from {path}"); - + let content = if path.contains("ripple-rpc.json") { fs::read_to_string(path).map_err(|e| { error!("Failed to read the file at {}: {:?}", path, e); @@ -210,13 +210,13 @@ impl OpenRpcState { RippleError::ParseError }); }; - + let mut ripple_open_rpc = FireboltOpenRpc::default(); Self::load_additional_rpc(&mut ripple_open_rpc, &content); self.add_open_rpc(ripple_open_rpc); info!("Successfully loaded extn_sdk from {path}"); Ok(()) - } + } pub fn add_open_rpc(&self, open_rpc: FireboltOpenRpc) { let cap_map = open_rpc.get_methods_caps(); From f207dd955d0ee49dc8a34b0021a70880607d7a78 Mon Sep 17 00:00:00 2001 From: Brindha Senthil Date: Tue, 3 Sep 2024 10:57:31 -0700 Subject: [PATCH 3/8] feat: fix clippy error --- core/sdk/src/api/manifest/device_manifest.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/sdk/src/api/manifest/device_manifest.rs b/core/sdk/src/api/manifest/device_manifest.rs index d922cf744..04494eeb5 100644 --- a/core/sdk/src/api/manifest/device_manifest.rs +++ b/core/sdk/src/api/manifest/device_manifest.rs @@ -150,11 +150,11 @@ impl Default for DistributionConfiguration { let library_path = if cfg!(feature = "local_dev") { std::env::var("HOME").unwrap_or_default() + "/firebolt-app-library.json" } else { - "/etc/firebolt-app-library.json".into() + "/etc/firebolt-app-library.json".to_string() }; DistributionConfiguration { - library: library_path.into(), + library: library_path, } } } From 76b2dd8466e8567f8d9cd062c12649a33ca4b62a Mon Sep 17 00:00:00 2001 From: Brindha Senthil Date: Wed, 4 Sep 2024 11:15:54 -0700 Subject: [PATCH 4/8] feat: Add support for MANIFEST_DIR environment variable in local development --- core/main/src/bootstrap/manifest/apps.rs | 22 ++++++++++---------- core/sdk/src/api/manifest/device_manifest.rs | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/core/main/src/bootstrap/manifest/apps.rs b/core/main/src/bootstrap/manifest/apps.rs index 5bdb65948..0c89591da 100644 --- a/core/main/src/bootstrap/manifest/apps.rs +++ b/core/main/src/bootstrap/manifest/apps.rs @@ -64,17 +64,17 @@ fn load_from_env() -> Result<(String, Vec), RippleError> { } fn load_from_home() -> Result<(String, Vec), RippleError> { - std::env::var("HOME").map_or_else( - |_| Err(RippleError::MissingInput), - |home| { - let sub_path = if cfg!(feature = "local_dev") { - "firebolt-app-library.json" - } else { - ".ripple/firebolt-app-library.json" - }; - load(format!("{}/{}", home, sub_path)) - }, - ) + let (env_var, sub_path) = if cfg!(feature = "local_dev") { + ("MANIFEST_DIR", "firebolt-app-library.json") + } else { + ("HOME", ".ripple/firebolt-app-library.json") + }; + + let path = std::env::var(env_var) + .map(|dir| format!("{}/{}", dir, sub_path)) + .map_err(|_| RippleError::MissingInput)?; + + load(path) } fn load_from_etc() -> Result<(String, Vec), RippleError> { diff --git a/core/sdk/src/api/manifest/device_manifest.rs b/core/sdk/src/api/manifest/device_manifest.rs index 04494eeb5..9ed6231f4 100644 --- a/core/sdk/src/api/manifest/device_manifest.rs +++ b/core/sdk/src/api/manifest/device_manifest.rs @@ -148,7 +148,7 @@ pub struct DistributionConfiguration { impl Default for DistributionConfiguration { fn default() -> Self { let library_path = if cfg!(feature = "local_dev") { - std::env::var("HOME").unwrap_or_default() + "/firebolt-app-library.json" + std::env::var("MANIFEST_DIR").unwrap_or_default() + "/firebolt-app-library.json" } else { "/etc/firebolt-app-library.json".to_string() }; From da53ab9a37f018f607e426215547aaad6aa59d3e Mon Sep 17 00:00:00 2001 From: Brindha Senthil Date: Thu, 5 Sep 2024 12:19:44 -0700 Subject: [PATCH 5/8] feat: Updated openstate.rs --- core/main/src/state/openrpc_state.rs | 24 +----------------------- 1 file changed, 1 insertion(+), 23 deletions(-) diff --git a/core/main/src/state/openrpc_state.rs b/core/main/src/state/openrpc_state.rs index a27adf9d1..73a3e703e 100644 --- a/core/main/src/state/openrpc_state.rs +++ b/core/main/src/state/openrpc_state.rs @@ -188,7 +188,7 @@ impl OpenRpcState { v.build_provider_relation_sets(&firebolt_open_rpc.methods); for path in extn_sdks { - if v.load_ext_sdk_rpc(&path).is_err() { + if v.add_extension_open_rpc(&path).is_err() { error!("Error adding extn_sdk from {path}"); } } @@ -196,28 +196,6 @@ impl OpenRpcState { v } - pub fn load_ext_sdk_rpc(&self, path: &str) -> Result<(), RippleError> { - info!("Loading extension OpenRPC from {path}"); - - let content = if path.contains("ripple-rpc.json") { - fs::read_to_string(path).map_err(|e| { - error!("Failed to read the file at {}: {:?}", path, e); - RippleError::ParseError - })? - } else { - return self.add_extension_open_rpc(path).map_err(|_| { - error!("Error adding extn_sdk from {path}"); - RippleError::ParseError - }); - }; - - let mut ripple_open_rpc = FireboltOpenRpc::default(); - Self::load_additional_rpc(&mut ripple_open_rpc, &content); - self.add_open_rpc(ripple_open_rpc); - info!("Successfully loaded extn_sdk from {path}"); - Ok(()) - } - pub fn add_open_rpc(&self, open_rpc: FireboltOpenRpc) { let cap_map = open_rpc.get_methods_caps(); self.extend_caps(cap_map); From 3c8a72b81aa183f60381b5a443c0c9d538d27498 Mon Sep 17 00:00:00 2001 From: Brindha Senthil Date: Thu, 5 Sep 2024 12:24:30 -0700 Subject: [PATCH 6/8] feat: Removed dead code --- core/main/src/state/openrpc_state.rs | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/core/main/src/state/openrpc_state.rs b/core/main/src/state/openrpc_state.rs index 73a3e703e..684bac19c 100644 --- a/core/main/src/state/openrpc_state.rs +++ b/core/main/src/state/openrpc_state.rs @@ -15,7 +15,6 @@ // SPDX-License-Identifier: Apache-2.0 // -use jsonrpsee::tracing::info; use ripple_sdk::log::{debug, error}; use ripple_sdk::{api::firebolt::fb_openrpc::CapabilityPolicy, serde_json}; use ripple_sdk::{ @@ -24,7 +23,7 @@ use ripple_sdk::{ fb_capabilities::FireboltPermission, fb_openrpc::{ CapabilitySet, FireboltOpenRpc, FireboltOpenRpcMethod, FireboltSemanticVersion, - FireboltVersionManifest, OpenRPCParser, + FireboltVersionManifest, }, provider::ProviderAttributes, }, @@ -34,7 +33,6 @@ use ripple_sdk::{ }; use std::{ collections::HashMap, - fs, sync::{Arc, RwLock}, }; @@ -80,19 +78,6 @@ pub struct OpenRpcState { } impl OpenRpcState { - fn load_additional_rpc(rpc: &mut FireboltOpenRpc, file_contents: &str) { - match serde_json::from_str::(file_contents) { - Ok(addl_rpc) => { - for m in addl_rpc.methods { - rpc.methods.push(m.clone()); - } - } - Err(_) => { - error!("Could not read additional RPC file"); - } - } - } - fn load_open_rpc(path: &str) -> Option { match std::fs::read_to_string(path) { Ok(content) => { From 9f11e66114e20856e9b35bb5fe17d22946c6755f Mon Sep 17 00:00:00 2001 From: Brindha Senthil Date: Fri, 6 Sep 2024 09:27:56 -0700 Subject: [PATCH 7/8] feat: Updated code --- core/main/src/bootstrap/manifest/apps.rs | 15 ++++----------- core/sdk/src/api/manifest/device_manifest.rs | 2 +- 2 files changed, 5 insertions(+), 12 deletions(-) diff --git a/core/main/src/bootstrap/manifest/apps.rs b/core/main/src/bootstrap/manifest/apps.rs index 0c89591da..e5035bd9f 100644 --- a/core/main/src/bootstrap/manifest/apps.rs +++ b/core/main/src/bootstrap/manifest/apps.rs @@ -64,17 +64,10 @@ fn load_from_env() -> Result<(String, Vec), RippleError> { } fn load_from_home() -> Result<(String, Vec), RippleError> { - let (env_var, sub_path) = if cfg!(feature = "local_dev") { - ("MANIFEST_DIR", "firebolt-app-library.json") - } else { - ("HOME", ".ripple/firebolt-app-library.json") - }; - - let path = std::env::var(env_var) - .map(|dir| format!("{}/{}", dir, sub_path)) - .map_err(|_| RippleError::MissingInput)?; - - load(path) + match std::env::var("HOME") { + Ok(home) => load(format!("{}/.ripple/firebolt-app-library.json", home)), + Err(_) => Err(RippleError::MissingInput), + } } fn load_from_etc() -> Result<(String, Vec), RippleError> { diff --git a/core/sdk/src/api/manifest/device_manifest.rs b/core/sdk/src/api/manifest/device_manifest.rs index 9ed6231f4..b1f8d74ef 100644 --- a/core/sdk/src/api/manifest/device_manifest.rs +++ b/core/sdk/src/api/manifest/device_manifest.rs @@ -148,7 +148,7 @@ pub struct DistributionConfiguration { impl Default for DistributionConfiguration { fn default() -> Self { let library_path = if cfg!(feature = "local_dev") { - std::env::var("MANIFEST_DIR").unwrap_or_default() + "/firebolt-app-library.json" + std::env::var("APP_LIBRARY").unwrap_or_default() } else { "/etc/firebolt-app-library.json".to_string() }; From b7703006f1917ee097cab91ba0fbeb59404c4b68 Mon Sep 17 00:00:00 2001 From: Brindha Senthil Date: Wed, 11 Sep 2024 09:23:01 -0700 Subject: [PATCH 8/8] feat: Reverted changes in device_manifest.rs --- core/sdk/src/api/manifest/device_manifest.rs | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/core/sdk/src/api/manifest/device_manifest.rs b/core/sdk/src/api/manifest/device_manifest.rs index b1f8d74ef..3a079d00a 100644 --- a/core/sdk/src/api/manifest/device_manifest.rs +++ b/core/sdk/src/api/manifest/device_manifest.rs @@ -147,14 +147,8 @@ pub struct DistributionConfiguration { impl Default for DistributionConfiguration { fn default() -> Self { - let library_path = if cfg!(feature = "local_dev") { - std::env::var("APP_LIBRARY").unwrap_or_default() - } else { - "/etc/firebolt-app-library.json".to_string() - }; - DistributionConfiguration { - library: library_path, + library: "/etc/firebolt-app-library.json".into(), } } }