Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cln_plugin: switch lifetimes of ConfigOption from static to non-static #7089

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
12 changes: 6 additions & 6 deletions plugins/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -136,9 +136,9 @@ where
}
}

pub fn option<V: options::OptionType>(
pub fn option<'a, V: options::OptionType<'a>>(
mut self,
opt: options::ConfigOption<V>,
opt: options::ConfigOption<'a, V>,
) -> Builder<S, I, O> {
self.options.insert(opt.name().to_string(), opt.build());
self
Expand Down Expand Up @@ -514,9 +514,9 @@ where
.map(|c| c.clone())
}

pub fn option<OV: OptionType>(
pub fn option<'a, OV: OptionType<'a>>(
&self,
config_option: &options::ConfigOption<OV>,
config_option: &options::ConfigOption<'a, OV>,
) -> Result<OV::OutputValue> {
let value = self.option_str(config_option.name())?;
Ok(OV::from_value(&value))
Expand Down Expand Up @@ -611,9 +611,9 @@ where
.map(|c| c.clone())
}

pub fn option<OV: OptionType>(
pub fn option<'a, OV: OptionType<'a>>(
&self,
config_option: &options::ConfigOption<OV>,
config_option: &options::ConfigOption<'a, OV>,
) -> Result<OV::OutputValue> {
let value = self.option_str(config_option.name())?;
Ok(OV::from_value(&value))
Expand Down
75 changes: 37 additions & 38 deletions plugins/src/options.rs
Original file line number Diff line number Diff line change
Expand Up @@ -134,12 +134,19 @@ use serde::ser::Serializer;
use serde::Serialize;

pub mod config_type {
#[derive(Clone, Debug)]
pub struct Integer;
#[derive(Clone, Debug)]
pub struct DefaultInteger;
#[derive(Clone, Debug)]
pub struct String;
#[derive(Clone, Debug)]
pub struct DefaultString;
#[derive(Clone, Debug)]
pub struct Boolean;
#[derive(Clone, Debug)]
pub struct DefaultBoolean;
#[derive(Clone, Debug)]
pub struct Flag;
}

Expand All @@ -158,7 +165,7 @@ pub type DefaultBooleanConfigOption<'a> = ConfigOption<'a, config_type::DefaultB
/// Config value is represented as a flag
pub type FlagConfigOption<'a> = ConfigOption<'a, config_type::Flag>;

pub trait OptionType {
pub trait OptionType<'a> {
type OutputValue;
type DefaultValue;

Expand All @@ -169,9 +176,9 @@ pub trait OptionType {
fn get_value_type() -> ValueType;
}

impl OptionType for config_type::DefaultString {
impl<'a> OptionType<'a> for config_type::DefaultString {
type OutputValue = String;
type DefaultValue = &'static str;
type DefaultValue = &'a str;

fn convert_default(value: &Self::DefaultValue) -> Option<Value> {
Some(Value::String(value.to_string()))
Expand All @@ -189,7 +196,7 @@ impl OptionType for config_type::DefaultString {
}
}

impl OptionType for config_type::DefaultInteger {
impl<'a> OptionType<'a> for config_type::DefaultInteger {
type OutputValue = i64;
type DefaultValue = i64;

Expand All @@ -209,7 +216,7 @@ impl OptionType for config_type::DefaultInteger {
}
}

impl OptionType for config_type::DefaultBoolean {
impl<'a> OptionType<'a> for config_type::DefaultBoolean {
type OutputValue = bool;
type DefaultValue = bool;

Expand All @@ -228,7 +235,7 @@ impl OptionType for config_type::DefaultBoolean {
}
}

impl OptionType for config_type::Flag {
impl<'a> OptionType<'a> for config_type::Flag {
type OutputValue = bool;
type DefaultValue = ();

Expand All @@ -248,7 +255,7 @@ impl OptionType for config_type::Flag {
}
}

impl OptionType for config_type::String {
impl<'a> OptionType<'a> for config_type::String {
type OutputValue = Option<String>;
type DefaultValue = ();

Expand All @@ -272,7 +279,7 @@ impl OptionType for config_type::String {
}
}

impl OptionType for config_type::Integer {
impl<'a> OptionType<'a> for config_type::Integer {
type OutputValue = Option<i64>;
type DefaultValue = ();

Expand All @@ -295,7 +302,7 @@ impl OptionType for config_type::Integer {
ValueType::Integer
}
}
impl OptionType for config_type::Boolean {
impl<'a> OptionType<'a> for config_type::Boolean {
type OutputValue = Option<bool>;
type DefaultValue = ();

Expand Down Expand Up @@ -406,7 +413,7 @@ impl Value {
}

#[derive(Clone, Debug)]
pub struct ConfigOption<'a, V: OptionType> {
pub struct ConfigOption<'a, V: OptionType<'a>> {
/// The name of the `ConfigOption`.
pub name: &'a str,
/// The default value of the `ConfigOption`
Expand All @@ -415,7 +422,7 @@ pub struct ConfigOption<'a, V: OptionType> {
pub deprecated: bool,
}

impl<V: OptionType> ConfigOption<'_, V> {
impl<'a, V: OptionType<'a>> ConfigOption<'a, V> {
pub fn build(&self) -> UntypedConfigOption {
UntypedConfigOption {
name: self.name.to_string(),
Expand All @@ -427,11 +434,11 @@ impl<V: OptionType> ConfigOption<'_, V> {
}
}

impl DefaultStringConfigOption<'_> {
impl<'a> DefaultStringConfigOption<'a> {
pub const fn new_str_with_default(
name: &'static str,
default: &'static str,
description: &'static str,
name: &'a str,
default: &'a str,
description: &'a str,
) -> Self {
Self {
name: name,
Expand All @@ -442,23 +449,19 @@ impl DefaultStringConfigOption<'_> {
}
}

impl StringConfigOption<'_> {
pub const fn new_str_no_default(name: &'static str, description: &'static str) -> Self {
impl<'a> StringConfigOption<'a> {
pub const fn new_str_no_default(name: &'a str, description: &'a str) -> Self {
Self {
name,
default: (),
description : description,
description: description,
deprecated: false,
}
}
}

impl DefaultIntegerConfigOption<'_> {
pub const fn new_i64_with_default(
name: &'static str,
default: i64,
description: &'static str,
) -> Self {
impl<'a> DefaultIntegerConfigOption<'a> {
pub const fn new_i64_with_default(name: &'a str, default: i64, description: &'a str) -> Self {
Self {
name: name,
default: default,
Expand All @@ -468,8 +471,8 @@ impl DefaultIntegerConfigOption<'_> {
}
}

impl IntegerConfigOption<'_> {
pub const fn new_i64_no_default(name: &'static str, description: &'static str) -> Self {
impl<'a> IntegerConfigOption<'a> {
pub const fn new_i64_no_default(name: &'a str, description: &'a str) -> Self {
Self {
name: name,
default: (),
Expand All @@ -479,8 +482,8 @@ impl IntegerConfigOption<'_> {
}
}

impl BooleanConfigOption<'_> {
pub const fn new_bool_no_default(name: &'static str, description: &'static str) -> Self {
impl<'a> BooleanConfigOption<'a> {
pub const fn new_bool_no_default(name: &'a str, description: &'a str) -> Self {
Self {
name,
description,
Expand All @@ -490,12 +493,8 @@ impl BooleanConfigOption<'_> {
}
}

impl DefaultBooleanConfigOption<'_> {
pub const fn new_bool_with_default(
name: &'static str,
default: bool,
description: &'static str,
) -> Self {
impl<'a> DefaultBooleanConfigOption<'a> {
pub const fn new_bool_with_default(name: &'a str, default: bool, description: &'a str) -> Self {
Self {
name,
description,
Expand All @@ -505,8 +504,8 @@ impl DefaultBooleanConfigOption<'_> {
}
}

impl FlagConfigOption<'_> {
pub const fn new_flag(name: &'static str, description: &'static str) -> Self {
impl<'a> FlagConfigOption<'a> {
pub const fn new_flag(name: &'a str, description: &'a str) -> Self {
Self {
name,
description,
Expand Down Expand Up @@ -542,9 +541,9 @@ impl UntypedConfigOption {
}
}

impl<V> ConfigOption<'_, V>
impl<'a, V> ConfigOption<'a, V>
where
V: OptionType,
V: OptionType<'a>,
{
pub fn name(&self) -> &str {
&self.name
Expand Down