Skip to main content

ConfigService

Struct ConfigService 

Source
pub struct ConfigService;
Expand description

Configuration service for project configuration management

§Examples

use mecha10_cli::services::ConfigService;
use std::path::PathBuf;

// Load from specific path
let config = ConfigService::load_from(&PathBuf::from("custom.json")).await?;
println!("Robot ID: {}", config.robot.id);

// Find config in current or parent directories
let config_path = ConfigService::find_config()?;

Implementations§

Source§

impl ConfigService

Source

pub async fn load_from(path: &Path) -> Result<ProjectConfig, Error>

Load project configuration from a specific path

§Arguments
  • path - Path to the mecha10.json file
§Errors

Returns an error if:

  • The file doesn’t exist
  • The file cannot be read
  • The JSON is invalid
  • The configuration doesn’t match the expected schema
Source

pub fn find_config() -> Result<PathBuf, Error>

Find mecha10.json in the current directory or any parent directory

Searches upward from the current working directory until it finds a mecha10.json file or reaches the root directory.

§Returns

Returns the path to the found configuration file.

§Errors

Returns an error if no mecha10.json file is found in the current directory or any parent directory.

Source

pub fn find_config_from(start_dir: &Path) -> Result<PathBuf, Error>

Find mecha10.json starting from a specific directory

§Arguments
  • start_dir - Directory to start searching from
§Returns

Returns the path to the found configuration file.

§Errors

Returns an error if no mecha10.json file is found.

Source

pub fn is_initialized(dir: &Path) -> bool

Check if a project is initialized in the given directory

§Arguments
  • dir - Directory to check
§Returns

Returns true if mecha10.json exists in the directory.

Source

pub fn is_initialized_here() -> bool

Check if a project is initialized in the current directory

Source

pub async fn load_robot_id(path: &Path) -> Result<String, Error>

Load robot ID from configuration file

This is a convenience method that loads just the robot ID without parsing the entire configuration.

§Arguments
  • path - Path to the mecha10.json file
§Errors

Returns an error if the file cannot be read or parsed.

Source

pub fn validate(path: &Path) -> Result<(), Error>

Validate configuration file

Uses the mecha10-core schema validation to check if the configuration is valid according to the JSON schema and custom validation rules.

§Arguments
  • path - Path to the configuration file
§Errors

Returns an error if validation fails with details about what’s wrong.

Source

pub fn resolve_and_validate(path: Option<&Path>) -> Result<PathBuf, Error>

Resolve the config file to validate and validate it – the single implementation shared by mecha10 config validate and the config-validation step in mecha10 lint, so neither re-implements this logic locally.

  • path is None (the default): finds the project’s mecha10.json via Self::find_config and validates it plus every node config it references (via mecha10_core::schema_validation::validate_project_config).
  • path is Some: validates exactly that one file, auto-detecting whether it’s a project config or a node config (via mecha10_core::schema_validation::validate_config_file) – no recursion into other files. This is the mode a git hook uses to check only the files staged in a commit.
§Returns

The path that was validated, so callers can report it.

§Errors

Returns an error with the underlying schema-validation failure details if the target file doesn’t exist or fails validation.

Source

pub fn resolve_and_validate_with_node_schema_resolver( path: Option<&Path>, node_schema_resolver: Option<&dyn Fn(&Value) -> Option<Value>>, ) -> Result<PathBuf, Error>

Same as Self::resolve_and_validate, but lets a caller supply a mecha10_core::schema_validation::NodeSchemaResolver so each referenced node config validates against a node-type-specific schema instead of the generic envelope (LAB-1772).

This crate can’t construct a resolver itself – doing so needs each node’s concrete config struct, and mecha10-cli-core can’t depend on packages/nodes/* (see docs/validate-configs.md) – so it only accepts one as a parameter. packages/cli builds the actual resolver (via mecha10-schema-registry, which can depend on the node crates) and passes it in here.

§Errors

Returns an error with the underlying schema-validation failure details if the target file doesn’t exist or fails validation.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more