Skip to main content

DevcontextCommand

Enum DevcontextCommand 

Source
pub enum DevcontextCommand {
    Compile(DevcontextRequest),
    Explain {
        uri: String,
        request: DevcontextRequest,
    },
    Policy,
}
Expand description

What to ask of the context compiler: compile an answer, ask why one identifier is or is not in it, or read the rules the compiler decides by.

Explain takes the identifier positionally and then the same request flags as Compile, because the question it answers is about a compiled answer — “why is this not in it” is only meaningful against the request that left it out. Policy takes nothing: it is the compiler’s own table, not a question about a repository.

use clap::Parser;
use majordomus_cli::cli::{Cli, Command, DevcontextCommand};

let parse = |argv: &[&str]| {
    let cli = Cli::try_parse_from(argv).unwrap();
    let Command::Devcontext(args) = cli.command else { panic!("devcontext") };
    args.command
};

// the identifier is positional and the request flags follow it, so the budget the
// judgement is made under is part of the question
let explain = parse(&[
    "majordomus", "devcontext", "explain", "majordomus://rule/x@1", "--max-depth", "1",
]);
let DevcontextCommand::Explain { uri, request } = explain else { panic!("explain") };
assert_eq!(uri, "majordomus://rule/x@1");
assert_eq!(request.max_depth, Some(1));

// `policy` is about the compiler and not about a request, so it accepts no request flag
assert!(matches!(
    parse(&["majordomus", "devcontext", "policy"]),
    DevcontextCommand::Policy
));
assert!(
    Cli::try_parse_from(["majordomus", "devcontext", "policy", "--intent", "x"]).is_err(),
    "the rules do not depend on what is being asked about"
);

Variants§

§

Compile(DevcontextRequest)

Compile the context for a piece of work: every selected object with its provenance, the reason and the confidence, everything left out with the reason, what was deduplicated, and the per-tier budget; exit 10 when what may not be dropped already exceeds the budget

§

Explain

Why one canonical identifier is or is not in the context a request compiles to

Fields

§uri: String

The canonical identifier, majordomus://<kind>/<identity>

§request: DevcontextRequest

The request to judge it under.

§

Policy

The compiler’s own rules: the tiers, every edge of the composed graph and what is done with it, the selectors, the defaults

Trait Implementations§

Source§

impl Debug for DevcontextCommand

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl FromArgMatches for DevcontextCommand

Source§

fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
Source§

fn from_arg_matches_mut( __clap_arg_matches: &mut ArgMatches, ) -> Result<Self, Error>

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
Source§

fn update_from_arg_matches( &mut self, __clap_arg_matches: &ArgMatches, ) -> Result<(), Error>

Assign values from ArgMatches to self.
Source§

fn update_from_arg_matches_mut<'b>( &mut self, __clap_arg_matches: &mut ArgMatches, ) -> Result<(), Error>

Assign values from ArgMatches to self.
Source§

impl Subcommand for DevcontextCommand

Source§

fn augment_subcommands<'b>(__clap_app: Command) -> Command

Append to [Command] so it can instantiate Self via [FromArgMatches::from_arg_matches_mut] Read more
Source§

fn augment_subcommands_for_update<'b>(__clap_app: Command) -> Command

Append to [Command] so it can instantiate self via [FromArgMatches::update_from_arg_matches_mut] Read more
Source§

fn has_subcommand(__clap_name: &str) -> bool

Test whether Self can parse a specific subcommand

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
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

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

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

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.

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

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

Source§

type Error = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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.
§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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