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]]
|
||||
name = "nextcloud-config-parser"
|
||||
version = "0.13.1"
|
||||
version = "0.14.0"
|
||||
dependencies = [
|
||||
"form_urlencoded",
|
||||
"itertools",
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
[package]
|
||||
name = "nextcloud-config-parser"
|
||||
description = "Rust parser for nextcloud config files"
|
||||
version = "0.13.1"
|
||||
version = "0.14.0"
|
||||
authors = ["Robin Appelman <robin@icewind.nl>"]
|
||||
edition = "2021"
|
||||
license = "MIT OR Apache-2.0"
|
||||
|
|
|
|||
|
|
@ -11,10 +11,12 @@ use thiserror::Error;
|
|||
pub use nc::{parse, parse_glob};
|
||||
|
||||
#[derive(Debug)]
|
||||
#[non_exhaustive]
|
||||
pub struct Config {
|
||||
pub database: Database,
|
||||
pub database_prefix: String,
|
||||
pub redis: RedisConfig,
|
||||
pub notify_push_redis: Option<RedisConfig>,
|
||||
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()
|
||||
.into_string()
|
||||
.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 {
|
||||
database,
|
||||
database_prefix,
|
||||
nextcloud_url,
|
||||
redis,
|
||||
notify_push_redis,
|
||||
})
|
||||
}
|
||||
|
||||
|
|
@ -284,9 +290,12 @@ enum RedisAddress {
|
|||
Cluster(Vec<RedisConnectionAddr>),
|
||||
}
|
||||
|
||||
fn parse_redis_options(parsed: &Value) -> RedisConfig {
|
||||
let (redis_options, address) = if parsed["redis.cluster"].is_array() {
|
||||
let redis_options = &parsed["redis.cluster"];
|
||||
fn parse_redis_options(parsed: &Value, key: &str) -> RedisConfig {
|
||||
let cluster_key = format!("{key}.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 mut addresses = seeds
|
||||
.filter_map(|seed| seed.as_str())
|
||||
|
|
@ -297,7 +306,7 @@ fn parse_redis_options(parsed: &Value) -> RedisConfig {
|
|||
addresses.sort();
|
||||
(redis_options, RedisAddress::Cluster(addresses))
|
||||
} 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 address = RedisAddress::Single(RedisConnectionAddr::parse(
|
||||
host,
|
||||
|
|
@ -355,12 +364,12 @@ fn test_redis_empty_password_none() {
|
|||
let config =
|
||||
php_literal_parser::from_str(r#"["redis" => ["host" => "redis", "password" => "pass"]]"#)
|
||||
.unwrap();
|
||||
let redis = parse_redis_options(&config);
|
||||
let redis = parse_redis_options(&config, "redis");
|
||||
assert_eq!(redis.passwd(), Some("pass"));
|
||||
|
||||
let config =
|
||||
php_literal_parser::from_str(r#"["redis" => ["host" => "redis", "password" => ""]]"#)
|
||||
.unwrap();
|
||||
let redis = parse_redis_options(&config);
|
||||
let redis = parse_redis_options(&config, "redis");
|
||||
assert_eq!(redis.passwd(), None);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue