clightningrpc_plugin/
types.rs

1//! types
2use serde::{Deserialize, Serialize};
3use serde_json::Value;
4use std::fmt;
5
6#[derive(Deserialize, Serialize, Clone)]
7pub struct RpcOption {
8    /// option name that is specified by the
9    /// core lightning user, like --foo
10    pub name: String,
11    /// option type, that can be specified like the enum
12    #[serde(rename = "type")]
13    pub opt_typ: String,
14    /// default value, that can be specified only as string
15    /// and core lightning will convert it for you :) smart right?
16    pub default: Option<String>,
17    /// description of the option that is shows to the user
18    /// when lightningd --help is typed
19    pub description: String,
20    /// if the filed is deprecated
21    pub deprecated: bool,
22    /// The value specified by the user
23    pub value: Option<Value>,
24}
25
26impl RpcOption {
27    pub fn value<T: for<'de> serde::de::Deserialize<'de>>(&self) -> T {
28        let value: T = serde_json::from_value(self.value.to_owned().unwrap()).unwrap();
29        value
30    }
31}
32
33pub enum LogLevel {
34    Debug,
35    Info,
36    Warn,
37    Error,
38}
39
40impl fmt::Display for LogLevel {
41    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
42        match self {
43            LogLevel::Debug => write!(f, "debug"),
44            LogLevel::Info => write!(f, "info"),
45            LogLevel::Warn => write!(f, "warn"),
46            LogLevel::Error => write!(f, "error"),
47        }
48    }
49}
50
51#[cfg(feature = "log")]
52impl From<log::Level> for LogLevel {
53    fn from(value: log::Level) -> Self {
54        use log::Level;
55        match value {
56            Level::Debug => LogLevel::Debug,
57            Level::Info => LogLevel::Info,
58            Level::Warn => LogLevel::Warn,
59            Level::Error => LogLevel::Error,
60            Level::Trace => LogLevel::Debug,
61        }
62    }
63}