32 个版本

0.0.52-alpha22020年10月1日
0.0.51-alpha12020年7月31日
0.0.46-alpha12020年3月27日
0.0.42-alpha12019年12月30日
0.0.39-alpha42019年11月25日

#11 in #conductor

Download history 199/week @ 2024-04-01

每月 79 次下载

GPL-3.0-only

2MB
40K SLoC

Holochain Conductor API

此包是一个库,提供类型和函数,帮助构建 Holochain 导管,如ADR15 中所述。

根据具体(应用)用例,Holochain 实例运行的上下文可能差异很大。应用开发者可能希望将 Holochain 与核心库捆绑在一起并将其静态链接到自定义的可执行文件中。在这种情况下,可以使用 #holochain.rs 作为单个实例的包装器。

在一般情况下,许多不同的 DNA 在同一代理(即用户)的上下文中同时执行。 conductor.rs 提供一个结构体,用于实例化、持有和管理多个 Holochain 实例。它使用 config.rs,该文件提供了可用于将配置序列化和反序列化为配置文件的导管配置结构体。

所有这些都在 conductor 包 中使用。

示例

extern crate holochain_conductor_lib;
extern crate holochain_core_types;
#[macro_use]
extern crate structopt;

use holochain_conductor_lib::{
    config::{load_configuration, Configuration},
    conductor::Conductor,
};
use holochain_core_types::error::HolochainError;
use std::{fs::File, io::prelude::*, path::PathBuf, sync::Arc};
use structopt::StructOpt;

#[derive(StructOpt, Debug)]
#[structopt(name = "hcc")]
struct Opt {
    /// Path to the toml configuration file for the conductor
    #[structopt(short = "c", long = "config", parse(from_os_str))]
    config: Option<PathBuf>,
}

    let opt = Opt::from_args();
    let config_path = opt.config
        .unwrap_or(PathBuf::from(r"~/.holochain/conductor/conductor_config.toml"));
    let config_path_str = config_path.to_str().unwrap();
    println!("Using config path: {}", config_path_str);
    match bootstrap_from_config(config_path_str) {
        Ok(mut conductor) => {
            if conductor.instances().len() > 0 {
                println!(
                    "Successfully loaded {} instance configurations",
                    conductor.instances().len()
                );
                println!("Starting all of them...");
                conductor.start_all_instances();
                println!("Done.");
                loop {}
            } else {
                println!("No instance started, bailing...");
            }
        }
        Err(error) => println!("Error while trying to boot from config: {:?}", error),
    };

fn bootstrap_from_config(path: &str) -> Result<Conductor, HolochainError> {
    let config = load_config_file(&String::from(path))?;
    config
        .check_consistency(&mut Arc::new(Box::new(Conductor::load_dna)))
        .map_err(|string| HolochainError::ConfigError(string))?;
    let mut conductor = Conductor::from_config(config);
    conductor.boot_from_config()?;
    Ok(conductor)
}

fn load_config_file(path: &String) -> Result<Configuration, HolochainError> {
    let mut f = File::open(path)?;
    let mut contents = String::new();
    f.read_to_string(&mut contents)?;
    Ok(load_configuration::<Configuration>(&contents)?)
}

依赖项

~77MB
~1.5M SLoC