mirror of
https://github.com/aljazceru/lightning.git
synced 2025-12-19 15:14:23 +01:00
cln-plugin: Populate the options when we get an init call
This commit is contained in:
committed by
Rusty Russell
parent
249fa8675a
commit
fbcb4c33ad
@@ -159,7 +159,7 @@ where
|
|||||||
serde_json::to_value(self.handle_get_manifest(c, state).await?).unwrap()
|
serde_json::to_value(self.handle_get_manifest(c, state).await?).unwrap()
|
||||||
}
|
}
|
||||||
messages::Request::Init(c) => {
|
messages::Request::Init(c) => {
|
||||||
serde_json::to_value(Plugin::<S, I, O>::handle_init(c, state).await?).unwrap()
|
serde_json::to_value(self.handle_init(c, state).await?).unwrap()
|
||||||
}
|
}
|
||||||
o => panic!("Request {:?} is currently unhandled", o),
|
o => panic!("Request {:?} is currently unhandled", o),
|
||||||
};
|
};
|
||||||
@@ -196,9 +196,30 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
async fn handle_init(
|
async fn handle_init(
|
||||||
_call: messages::InitCall,
|
&mut self,
|
||||||
|
call: messages::InitCall,
|
||||||
_state: Arc<Mutex<S>>,
|
_state: Arc<Mutex<S>>,
|
||||||
) -> Result<messages::InitResponse, Error> {
|
) -> Result<messages::InitResponse, Error> {
|
||||||
|
use options::Value as OValue;
|
||||||
|
use serde_json::Value as JValue;
|
||||||
|
|
||||||
|
// Match up the ConfigOptions and fill in their values if we
|
||||||
|
// have a matching entry.
|
||||||
|
|
||||||
|
for opt in self.options.iter_mut() {
|
||||||
|
if let Some(val) = call.options.get(opt.name()) {
|
||||||
|
opt.value = Some(match (opt.default(), &val) {
|
||||||
|
(OValue::String(_), JValue::String(s)) => OValue::String(s.clone()),
|
||||||
|
(OValue::Integer(_), JValue::Number(n)) => OValue::Integer(n.as_i64().unwrap()),
|
||||||
|
(OValue::Boolean(_), JValue::Bool(n)) => OValue::Boolean(*n),
|
||||||
|
|
||||||
|
// It's ok to panic, if we get here c-lightning
|
||||||
|
// has not enforced the option type.
|
||||||
|
(_, _) => panic!("Mismatching types in options: {:?} != {:?}", opt, val),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Ok(messages::InitResponse::default())
|
Ok(messages::InitResponse::default())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -62,9 +62,8 @@ pub(crate) enum Notification {
|
|||||||
pub struct GetManifestCall {}
|
pub struct GetManifestCall {}
|
||||||
|
|
||||||
#[derive(Deserialize, Debug)]
|
#[derive(Deserialize, Debug)]
|
||||||
pub struct InitCall {
|
pub(crate) struct InitCall {
|
||||||
pub options: Value,
|
pub(crate) options: HashMap<String, Value>,
|
||||||
pub configuration: HashMap<String, Value>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ def test_plugin_start(node_factory):
|
|||||||
"""Start a minimal plugin and ensure it is well-behaved
|
"""Start a minimal plugin and ensure it is well-behaved
|
||||||
"""
|
"""
|
||||||
bin_path = Path.cwd() / "target" / "debug" / "examples" / "cln-plugin-startup"
|
bin_path = Path.cwd() / "target" / "debug" / "examples" / "cln-plugin-startup"
|
||||||
l1 = node_factory.get_node(options={"plugin": str(bin_path)})
|
l1 = node_factory.get_node(options={"plugin": str(bin_path), 'test-option': 31337})
|
||||||
|
|
||||||
cfg = l1.rpc.listconfigs()
|
cfg = l1.rpc.listconfigs()
|
||||||
p = cfg['plugins'][0]
|
p = cfg['plugins'][0]
|
||||||
@@ -32,9 +32,8 @@ def test_plugin_start(node_factory):
|
|||||||
expected = {
|
expected = {
|
||||||
'name': 'cln-plugin-startup',
|
'name': 'cln-plugin-startup',
|
||||||
'options': {
|
'options': {
|
||||||
'test-option': 42
|
'test-option': 31337
|
||||||
},
|
},
|
||||||
'path': None
|
'path': None
|
||||||
}
|
}
|
||||||
assert expected == p
|
assert expected == p
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user