cdns_rs/a_sync/
cfg_parsers.rs

1/*-
2 * cdns-rs - a simple sync/async DNS query library
3 * 
4 * Copyright (C) 2020  Aleksandr Morozov
5 * 
6 * Copyright 2025 Aleksandr Morozov
7 * 
8 * Licensed under the EUPL, Version 1.2 or - as soon they will be approved by
9 * the European Commission - subsequent versions of the EUPL (the "Licence").
10 * 
11 * You may not use this work except in compliance with the Licence.
12 * 
13 * You may obtain a copy of the Licence at:
14 * 
15 *    https://joinup.ec.europa.eu/software/page/eupl
16 * 
17 * Unless required by applicable law or agreed to in writing, software
18 * distributed under the Licence is distributed on an "AS IS" basis, WITHOUT
19 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
20 * Licence for the specific language governing permissions and limitations
21 * under the Licence.
22 */
23
24/// This file contains the config file parsers.
25
26use std::path::Path;
27
28use async_trait::async_trait;
29
30use tokio::io::AsyncReadExt;
31use tokio::fs::File;
32
33use crate::{internal_error_map, error::*};
34
35
36#[async_trait]
37pub trait ConfigParser<T>
38{
39    async fn parse_config() -> CDnsResult<T>;
40
41    fn get_file_path() -> &'static Path;
42
43    fn is_default(&self) -> bool;
44}
45
46pub(super) async 
47fn read_file(path: &str) -> CDnsResult<String>
48{
49    let mut file = 
50        File::open(path).await
51            .map_err(|e| internal_error_map!(CDnsErrorType::InternalError, "{}", e))?;
52
53    let mut file_content: String = String::new();
54
55    file.read_to_string(&mut file_content).await
56        .map_err(|e| internal_error_map!(CDnsErrorType::InternalError, "{}", e))?;
57
58    return Ok(file_content);
59}
60
61
62