Skip to main content

onetaskgraph_plugin_api/
lib.rs

1//! The contract every onetaskgraph source is written against.
2//!
3//! This crate holds exactly what a plugin author needs in order to implement a
4//! source, and nothing else: the two traits, the work types, the query and paging
5//! types, the capability declaration, and the error enum. The engine that drives
6//! sources lives in `onetaskgraph-core`, and **no plugin crate may depend on it**:
7//! `deny.toml` permits that crate exactly one wrapper, the binary, failing the
8//! required `deny` job, and `scripts/check-plugin-isolation.sh` reads the real
9//! `cargo metadata` graph inside `just check`.
10//!
11//! Keeping this crate still is the point. Every change here rebuilds and re-tests
12//! every plugin, which is exactly the cost the split exists to avoid paying on an
13//! ordinary engine change. When a new type could plausibly sit on either side, it
14//! belongs in `onetaskgraph-core` unless a trait signature names it.
15#![deny(missing_docs)]
16
17mod asset;
18mod cache;
19mod capability;
20mod clock;
21mod comment;
22mod error;
23mod id;
24mod metadata;
25mod metering;
26mod query;
27mod source;
28mod status_mapping;
29mod update;
30mod visibility;
31mod work;
32mod write;
33
34pub use asset::{
35    Asset, AssetContentType, AssetName, AssetPayload, AssetUpload, AssetUploads, AssetWrite,
36    AssetsWritten, asset_references, asset_sha256, assetless, body_digest, is_sha256,
37    rewrite_asset_references, serve_asset_references,
38};
39pub use cache::{
40    Coverage, JournalEntry, PartOutcome, RequestKind, Shown, VersionCoverage, WholeTask,
41    WriteJournal,
42};
43pub use capability::{Capabilities, DependencySupport, Support};
44pub use clock::{Clock, SIMULATED_CLOCK_VARIABLE, SharedClock, system_clock};
45pub use comment::{
46    Comment, CommentBody, CommentCopy, CommentOrigin, NewComment, TaskDetailRead, commentless,
47};
48pub use error::SourceError;
49pub use id::{NativeId, SOURCE_NAME_PATTERN, SourceName};
50pub use metadata::{MetadataKey, MetadataRecord, unwritable_metadata};
51pub use metering::{Metered, Metering};
52pub use query::{
53    Cursor, DocumentQuery, LabelFilter, MetadataMatch, Page, PageRequest, ProjectFilter,
54    ProjectQuery, TaskQuery, TextFields, TextQuery,
55};
56pub use source::{Health, SecretResolver, SourcePlugin, TaskSource};
57pub use status_mapping::{StatusMapping, StatusName, StatusNames, UnmappedStatus};
58pub use update::{TaskUpdate, TaskUpdateOutcome, UpdatedField};
59pub use visibility::{Visibility, WriteTarget};
60pub use work::{
61    Classification, DependencyEdge, DependencyEndpoint, DependencyKind, Direction, Document,
62    ItemKind, Label, Location, Priority, Project, Repository, Status, StatusCategory, Task,
63    TaskRef,
64};
65pub use write::{ItemWrite, WriteSupport, documentless, unwritable, unwritable_field};