Expand description
§tasktree
Distributed task-tree values: W3C trace-compatible task identities under an application-supplied URN scheme, validated lifecycle transitions, parent-child lineage, progress, and timestamps.
This crate is deliberately runtime-independent — no async, no I/O, no executor. It is the value layer a distributed task engine is built on; the engine (registries, admission, execution, event streams) is yours.
- Identity — a
TaskTreeIdis W3C trace-sized (16 bytes) and aTaskNodeIdspan-sized (8 bytes), so every task maps directly onto Trace Context: a tree id parses from its URN, a bare trace id, or a fulltraceparentheader. Every tree has one reserved root node, andTaskId::childmints siblings inside the tree. - Your namespace, not ours — identities are minted under a
UrnSchemethe application defines; this crate ships no namespace of its own, so no third party can mint another system’s URNs and two systems’ identities can never be confused, even at the type level. Prefixes are validated at compile time. - Lifecycle —
TaskStatuswith a validated transition machine (admitted → queued → running → sealing → done/failed/cancelled); terminal states admit no exits, and the irreversible sealing region refuses cancellation. Illegal edges are unrepresentable asTaskTransitionvalues. - Lineage —
TaskLineageproves a parent-child edge is within one tree and never self-referential, enforced again on deserialization. - Progress — typed units, bounded aggregation, display fractions, and lifecycle timestamps.
use tasktree::{TaskId, TaskLineage, TaskStatus, UrnScheme};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
struct MyUrn;
impl UrnScheme for MyUrn {
const TASK_PREFIX: &'static str = "urn:my-app:task:";
const TREE_PREFIX: &'static str = "urn:my-app:task-tree:";
}
let root: TaskId<MyUrn> = TaskId::generate();
let child = root.child();
assert!(root.as_str().starts_with("urn:my-app:task:"));
let edge = TaskLineage::try_new(child, root).expect("same tree, not self");
assert!(TaskStatus::Running.validate_transition(TaskStatus::Sealing).is_ok());Serde uses the URN string form throughout, and every deserialization re-validates: a foreign prefix, a zero identity, or an illegal transition never becomes a value.
§License
Licensed under either of:
- Apache License, Version 2.0 (
LICENSE-APACHE); - MIT License (
LICENSE-MIT).
§Links
Structs§
- TaskId
- Canonical, globally usable identity of one task, minted under the
application’s
UrnScheme. - Task
Identity Error - A malformed task identity.
- Task
Lineage - A validated child and its exact parent in one distributed task tree.
- Task
Node Id - W3C span-sized identity for one task node.
- Task
Progress - Progress counters for a running task.
- Task
Progress Update - A single progress observation for a task.
- Task
Timestamps - Unix-epoch timestamps tracking the lifecycle of a task.
- Task
Transition - One validated lifecycle transition.
- Task
Transition Error - An illegal task lifecycle transition.
- Task
Tree Id - W3C trace-sized identity for one distributed task tree, minted
under the application’s
UrnScheme.
Enums§
- Progress
Unit - The unit of measurement for progress counters.
- Task
Event Level - Verbosity tier of a task activity event.
- Task
Lineage Error - A structurally invalid task lineage.
- Task
Status - Lifecycle status of a task.
Traits§
- UrnScheme
- The URN namespace an application mints its task identities under.