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}