Skip to main content

soil_cli/params/
offchain_worker_params.rs

1// This file is part of Soil.
2
3// Copyright (C) Soil contributors.
4// Copyright (C) Parity Technologies (UK) Ltd.
5// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0
6
7//! Offchain worker related configuration parameters.
8//!
9//! A subset of configuration parameters which are relevant to
10//! the inner working of offchain workers. The usage is solely
11//! targeted at handling input parameter parsing providing
12//! a reasonable abstraction.
13
14use clap::{ArgAction, Args};
15use soil_network::config::Role;
16use soil_service::config::OffchainWorkerConfig;
17
18use crate::{error, OffchainWorkerEnabled};
19
20/// Offchain worker related parameters.
21#[derive(Debug, Clone, Args)]
22pub struct OffchainWorkerParams {
23	/// Execute offchain workers on every block.
24	#[arg(
25		long = "offchain-worker",
26		value_name = "ENABLED",
27		value_enum,
28		ignore_case = true,
29		default_value_t = OffchainWorkerEnabled::WhenAuthority
30	)]
31	pub enabled: OffchainWorkerEnabled,
32
33	/// Enable offchain indexing API.
34	///
35	/// Allows the runtime to write directly to offchain workers DB during block import.
36	#[arg(long = "enable-offchain-indexing", value_name = "ENABLE_OFFCHAIN_INDEXING", default_value_t = false, action = ArgAction::Set)]
37	pub indexing_enabled: bool,
38}
39
40impl OffchainWorkerParams {
41	/// Load spec to `Configuration` from `OffchainWorkerParams` and spec factory.
42	pub fn offchain_worker(&self, role: &Role) -> error::Result<OffchainWorkerConfig> {
43		let enabled = match (&self.enabled, role) {
44			(OffchainWorkerEnabled::WhenAuthority, Role::Authority { .. }) => true,
45			(OffchainWorkerEnabled::Always, _) => true,
46			(OffchainWorkerEnabled::Never, _) => false,
47			(OffchainWorkerEnabled::WhenAuthority, _) => false,
48		};
49
50		let indexing_enabled = self.indexing_enabled;
51		Ok(OffchainWorkerConfig { enabled, indexing_enabled })
52	}
53}