mirror of
https://codeberg.org/icewind/nextcloud-config-parser.git
synced 2026-06-03 16:44:09 +02:00
add support for separate notify_push redis instance
This commit is contained in:
parent
e440d9fb2e
commit
d69ac5e8f2
4 changed files with 20 additions and 9 deletions
2
Cargo.lock
generated
2
Cargo.lock
generated
|
|
@ -836,7 +836,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nextcloud-config-parser"
|
name = "nextcloud-config-parser"
|
||||||
version = "0.13.1"
|
version = "0.14.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"form_urlencoded",
|
"form_urlencoded",
|
||||||
"itertools",
|
"itertools",
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
[package]
|
[package]
|
||||||
name = "nextcloud-config-parser"
|
name = "nextcloud-config-parser"
|
||||||
description = "Rust parser for nextcloud config files"
|
description = "Rust parser for nextcloud config files"
|
||||||
version = "0.13.1"
|
version = "0.14.0"
|
||||||
authors = ["Robin Appelman <robin@icewind.nl>"]
|
authors = ["Robin Appelman <robin@icewind.nl>"]
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
license = "MIT OR Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
|
|
|
||||||
|
|
@ -11,10 +11,12 @@ use thiserror::Error;
|
||||||
pub use nc::{parse, parse_glob};
|
pub use nc::{parse, parse_glob};
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
|
#[non_exhaustive]
|
||||||
pub struct Config {
|
pub struct Config {
|
||||||
pub database: Database,
|
pub database: Database,
|
||||||
pub database_prefix: String,
|
pub database_prefix: String,
|
||||||
pub redis: RedisConfig,
|
pub redis: RedisConfig,
|
||||||
|
pub notify_push_redis: Option<RedisConfig>,
|
||||||
pub nextcloud_url: String,
|
pub nextcloud_url: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
23
src/nc.rs
23
src/nc.rs
|
|
@ -109,13 +109,19 @@ fn parse_files(files: impl IntoIterator<Item = PathBuf>) -> Result<Config> {
|
||||||
.clone()
|
.clone()
|
||||||
.into_string()
|
.into_string()
|
||||||
.ok_or(Error::NoUrl)?;
|
.ok_or(Error::NoUrl)?;
|
||||||
let redis = parse_redis_options(&parsed);
|
let redis = parse_redis_options(&parsed, "redis");
|
||||||
|
let notify_push_redis = if parsed["notify_push_redis"].is_array() {
|
||||||
|
Some(parse_redis_options(&parsed, "notify_push_redis"))
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
|
|
||||||
Ok(Config {
|
Ok(Config {
|
||||||
database,
|
database,
|
||||||
database_prefix,
|
database_prefix,
|
||||||
nextcloud_url,
|
nextcloud_url,
|
||||||
redis,
|
redis,
|
||||||
|
notify_push_redis,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -284,9 +290,12 @@ enum RedisAddress {
|
||||||
Cluster(Vec<RedisConnectionAddr>),
|
Cluster(Vec<RedisConnectionAddr>),
|
||||||
}
|
}
|
||||||
|
|
||||||
fn parse_redis_options(parsed: &Value) -> RedisConfig {
|
fn parse_redis_options(parsed: &Value, key: &str) -> RedisConfig {
|
||||||
let (redis_options, address) = if parsed["redis.cluster"].is_array() {
|
let cluster_key = format!("{key}.cluster");
|
||||||
let redis_options = &parsed["redis.cluster"];
|
let cluster_key = cluster_key.as_str();
|
||||||
|
|
||||||
|
let (redis_options, address) = if parsed[cluster_key].is_array() {
|
||||||
|
let redis_options = &parsed[cluster_key];
|
||||||
let seeds = redis_options["seeds"].values();
|
let seeds = redis_options["seeds"].values();
|
||||||
let mut addresses = seeds
|
let mut addresses = seeds
|
||||||
.filter_map(|seed| seed.as_str())
|
.filter_map(|seed| seed.as_str())
|
||||||
|
|
@ -297,7 +306,7 @@ fn parse_redis_options(parsed: &Value) -> RedisConfig {
|
||||||
addresses.sort();
|
addresses.sort();
|
||||||
(redis_options, RedisAddress::Cluster(addresses))
|
(redis_options, RedisAddress::Cluster(addresses))
|
||||||
} else {
|
} else {
|
||||||
let redis_options = &parsed["redis"];
|
let redis_options = &parsed[key];
|
||||||
let host = redis_options["host"].as_str().unwrap_or("127.0.0.1");
|
let host = redis_options["host"].as_str().unwrap_or("127.0.0.1");
|
||||||
let address = RedisAddress::Single(RedisConnectionAddr::parse(
|
let address = RedisAddress::Single(RedisConnectionAddr::parse(
|
||||||
host,
|
host,
|
||||||
|
|
@ -355,12 +364,12 @@ fn test_redis_empty_password_none() {
|
||||||
let config =
|
let config =
|
||||||
php_literal_parser::from_str(r#"["redis" => ["host" => "redis", "password" => "pass"]]"#)
|
php_literal_parser::from_str(r#"["redis" => ["host" => "redis", "password" => "pass"]]"#)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
let redis = parse_redis_options(&config);
|
let redis = parse_redis_options(&config, "redis");
|
||||||
assert_eq!(redis.passwd(), Some("pass"));
|
assert_eq!(redis.passwd(), Some("pass"));
|
||||||
|
|
||||||
let config =
|
let config =
|
||||||
php_literal_parser::from_str(r#"["redis" => ["host" => "redis", "password" => ""]]"#)
|
php_literal_parser::from_str(r#"["redis" => ["host" => "redis", "password" => ""]]"#)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
let redis = parse_redis_options(&config);
|
let redis = parse_redis_options(&config, "redis");
|
||||||
assert_eq!(redis.passwd(), None);
|
assert_eq!(redis.passwd(), None);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue