rocketmq_common/utils/parse_config_file.rs
1/*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18use std::fmt::Debug;
19use std::path::PathBuf;
20
21use config::Config;
22use rocketmq_error::RocketMQResult;
23use serde::Deserialize;
24use tracing::error;
25use tracing::warn;
26
27use crate::error::CommonError;
28
29pub fn parse_config_file<'de, C>(config_file: PathBuf) -> crate::error::RocketMQResult<C>
30where
31 C: Debug + Deserialize<'de>,
32{
33 let config_file = match Config::builder()
34 .add_source(config::File::from(config_file.as_path()))
35 .build()
36 {
37 Ok(cfg) => match cfg.try_deserialize::<C>() {
38 Ok(value) => value,
39 Err(err) => {
40 error!(
41 "Failed to load config file: {:?}, error: {:?}",
42 config_file, err
43 );
44 return Err(CommonError::ConfigError(err));
45 }
46 },
47 Err(err) => {
48 error!(
49 "Failed to load config file: {:?}, error: {:?}",
50 config_file, err
51 );
52 return Err(CommonError::ConfigError(err));
53 }
54 };
55 Ok(config_file)
56}