pub struct PackManifest {
pub schema_version: SchemaVersion,
pub name: String,
pub type: PackType,
pub version: Option<String>,
pub depends_on: Vec<String>,
pub children: Vec<ChildRef>,
pub actions: Vec<Action>,
pub teardown: Option<Vec<Action>>,
pub extensions: BTreeMap<String, Value>,
}Expand description
Top-level representation of a pack.yaml manifest.
Post-parse invariants:
schema_version=="1".namematches^[a-z][a-z0-9-]*$.- Unknown top-level keys are absent unless prefixed with
x-. - Predicate trees within any action are depth-bounded by
MAX_REQUIRE_DEPTH.
Fields§
§schema_version: SchemaVersionSchema-version literal. Always SchemaVersion::current at v1.
name: StringPack name (validated).
type: PackTypePack-type discriminator.
version: Option<String>Optional semver-ish string; grex does not parse it further in Stage A.
depends_on: Vec<String>Names of packs this pack depends on. Empty default.
children: Vec<ChildRef>Child-pack references. Empty default.
actions: Vec<Action>Ordered actions to run. Empty-default (valid no-op).
teardown: Option<Vec<Action>>Explicit teardown.
None means the pack-type driver should default to
reverse(actions) at execute time; Some(vec![]) means the
author explicitly opted into a no-op teardown. Preserving that
distinction matters for audit trails — Stage A does not execute but
must round-trip it.
extensions: BTreeMap<String, Value>Unknown x-* extension keys. Preserved verbatim for downstream
plugins.
Implementations§
Source§impl PackManifest
impl PackManifest
Sourcepub fn iter_all_symlinks(&self) -> impl Iterator<Item = (usize, &SymlinkArgs)>
pub fn iter_all_symlinks(&self) -> impl Iterator<Item = (usize, &SymlinkArgs)>
Walk every action (including those nested inside when blocks),
yielding (global_index, &symlink) pairs.
global_index is a 0-based counter across the flattened action-walk
— it is not the top-level index into PackManifest::actions.
Two symlinks at the same top-level index but at different nesting
depths receive distinct global indices. This is the index space
PackValidationError variants refer to.
Sourcepub fn validate_plan(&self) -> Result<(), Vec<PackValidationError>>
pub fn validate_plan(&self) -> Result<(), Vec<PackValidationError>>
Run every default Validator over this manifest.
Returns Ok(()) when no validator emits an error; otherwise returns
Err(Vec<_>) carrying every error across every validator (not
fail-first — downstream consumers can decide whether to abort on the
first or surface the full batch).
§Errors
Returns PackValidationError variants aggregated across the
validator set. See validate::run_all for the exact default set.
§Example
use grex_core::pack::parse;
let src = "schema_version: \"1\"\nname: ok\ntype: declarative\n";
let pack = parse(src).unwrap();
pack.validate_plan().unwrap();Trait Implementations§
Source§impl Clone for PackManifest
impl Clone for PackManifest
Source§fn clone(&self) -> PackManifest
fn clone(&self) -> PackManifest
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for PackManifest
impl Debug for PackManifest
Source§impl PartialEq for PackManifest
impl PartialEq for PackManifest
impl Eq for PackManifest
impl StructuralPartialEq for PackManifest
Auto Trait Implementations§
impl Freeze for PackManifest
impl RefUnwindSafe for PackManifest
impl Send for PackManifest
impl Sync for PackManifest
impl Unpin for PackManifest
impl UnsafeUnpin for PackManifest
impl UnwindSafe for PackManifest
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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