关于Rust读取自定义toml文件

参考链接:https://github.com/baoyachi/read-toml

  • 思路,关于自定义的toml文件应该有一定配置规则,不清楚或者不了解toml文件配置的点击这个链接

  • 知道toml的使用后,配置对应的配置选项,然后利用程序读取配置达到我们文件可动态配置的目的(下面这是对于toml配置的演示)

    [[ip_config]]
    name="CN"
    ip="192.168.1.1"
    port="11"
    
    [[ip_config]]
    name="TW"
    ip="192.168.2.2"
    port="22"
    
    [[ip_config]]
    name="JP"
    ip="192.168.3.3"
    port="33"
    
  • 如果有了类似配置后,大致是一下几步:

    • ①我们只需要读取该文件到对应内存
    • ②然后构造对应数据结构
    • ③序列化

    ok,我们下面来试试吧。

准备前

  • 因为使用到toml文件,因此我们需要引用到第三方依赖,需要下面三个依赖 ,后两者是序列化用的

    • https://crates.io/crates/toml
    • https://crates.io/crates/serde
    • https://crates.io/crates/serde_derive
    [dependencies]
    toml = "0.4.5"
    serde_derive = "1.0.32"
    serde = "1.0.32"
    

定义toml文件

    [[ip_config]]
    name="CN"
    ip="192.168.1.1"
    port="11"

    [[ip_config]]
    name="TW"
    ip="192.168.2.2"
    port="22"

    [[ip_config]]
    name="JP"
    ip="192.168.3.3"
    port="33"

构造数据结构

    struct IpConfig {
        name: Option,
        ip: Option,
        port: Option
    }
    
    struct Conf
    {
        ip_config: Option>
    }
    

读取文件到内存,序列化

#[macro_use]
extern crate serde_derive;
extern crate toml;

use std::fs::File;
use std::io::prelude::*;

#[derive(Deserialize)]
#[derive(Debug)]
struct IpConfig {
    name: Option,
    ip: Option,
    port: Option,
}

#[derive(Deserialize)]
#[derive(Debug)]
struct Conf
{
    ip_config: Option>
}

fn main() {
    let file_path = "config.toml";
    let mut file = match File::open(file_path) {
        Ok(f) => f,
        Err(e) => panic!("no such file {} exception:{}", file_path, e)
    };
    let mut str_val = String::new();
    match file.read_to_string(&mut str_val) {
        Ok(s) => s
        ,
        Err(e) => panic!("Error Reading file: {}", e)
    };
    let config: Conf = toml::from_str(&str_val).unwrap();

    for x in config.ip_config.unwrap() {
        println!("{:?}", x);
    }
}

ok,到此,自定义toml文件内容就加载到 config 中来了,打印出数据分别是

IpConfig { name: Some("CN"), ip: Some("192.168.1.1"), port: Some("11") }
IpConfig { name: Some("TW"), ip: Some("192.168.2.2"), port: Some("22") }
IpConfig { name: Some("JP"), ip: Some("192.168.3.3"), port: Some("33") }

项目链接地址:https://github.com/baoyachi/read-toml

你可能感兴趣的:(关于Rust读取自定义toml文件)